1、创建连接、
conn = pymysql.connect(host = 'loclhost', user = 'root', passwd = 'yutao',db = 'yutao',charset = 'utf8')
创建游标,给数据库发送sql语句/指令;
cur = conn.cursor()
2、给数据库发送指令
1)首先创建一个表名字为:userinfo,表中有两项表头,分别为username,passwd
我们这里用到了前面的知识--捕获异常
我们传入的是一组数据,username分表为user2、user3、user4;密码全部为123
users = [('user2', '123'), ('user3', '123'), ('user4', '123')]
try:
cur.execute('create table userinfo(username varchar(10), passwd varchar(10));')
except Exception as e:
print(e)
2)把这组数据传入新建的表中
insert_sqli = 'insert into userinfo values(%s, %s);'
cur.executemany(insert_sqli, users)
conn.commit()
cur.close()
conn.close()
注意:我们每次在对数据库进行操作之后我们都要进行提交,并且关闭游标和连接
查看我们上传的数据
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
END = '\033[0m'
if __name__ == '__main__':
print(OKBLUE + 'mysql连接成功' + END)
print(OKGREEN + 'mysql连接成功' + END)
print(FAIL + 'mysql连接成功' + END)
print(WARNING + 'mysql连接成功' + END)
注:这里的if __name == '__main__': 指只有在自己调用这段代码时才会运行,在其他的情况下将不会运行;
在这里我们需要注意的是,需要在你的pycharm中操作:在你的文件夹下把这个脚本添加进电脑的搜索路径中;
添加之后方可使用你自己封装的包;不要使用数字开头,数字开头的包导入会有问题;
假设我们要插入100名成员信息,初始密码均为‘000000‘
1、写一个函数可以生成100个信息的函数
def create_user_data(n): # 100
users = []
for i in range(n): # 0,1,2,3,
username = 'user'+str(i+1)
users.append((username, '000000'))
return users
我们这里写了形参,方便以后对于人数上的变化;我们这里的人员信息是用列表来存储的,列表中嵌套元组;
参照上面我们写过的插入单条信息,
import pymysql
from colorFont import *
def create_user_data(n):
users = []
for i in range(n):
username = 'user'+ str(i+1)
users.append((username , '000000'))
return users
conn = pymysql.connect(host = 'localhost', user = 'root',
passwd = 'yutao',db = 'yutao',charset = 'utf8')
cur = conn.cursor()
try:
insert_sql = 'insert into userinfo values(%s,%s)'
users = create_user_data(100)
cur.executemany(insert_sql,users)
except Exception as e :
print(e)
print(FAIL + "sql execute failed"+ END)
else:
print(OKGREEN + "sql execute success" + END)
conn.commit()
cur.close()
conn.close()
我们在捕获错误时,可以把错误打印出来,这样方便我们去排错
插入成功,可视化给我们很直观的表达
import pymysql
from colorFont import *
#连接数据库
conn = pymysql.connect(host='localhost',user='root',passwd='yutao',
db='yutao',charset='utf8')
#创建游标
cur = conn.cursor()
#给数据库发送命令
res = cur.execute('select * from userinfo;')
#一条一条的看--每次只打印一条表中的内容
print(cur.fetchone())
print(cur.fetchone())
print(cur.fetchone())
conn.close()
cur.close()
这里我们要说的是,这里的每次打印一条内容时,有点像我们前面说过的指针,他的位置可以指定,就像下面这样:
2、如何移动游标,分为以下两种情况:
1)relative: 相对的, 相对当前游标向前还是向后移动;
解释:计算机是从0开始计数的,所以显示的是第三个内容
2)'absolute' 默认移动到最开始;
3、查看表中完整内容
print(cur.fetchall())
我们看到的是元组中嵌套元组,往往我们需要的并不是看到这样的数据,更多是要使用它,那么我们把我们前面的知识结合起来,把它保存在我们的文件中,方便我们进行后面的操作;代码如下
import pymysql
from colorFont import *
#连接数据库
conn = pymysql.connect(host='localhost',user='root',passwd='yutao',
db='yutao',charset='utf8')
#创建游标
cur = conn.cursor()
#给数据库发送命令
res = cur.execute('select * from userinfo;')
#一条一条的看--每次只打印一条表中的内容
# print(cur.fetchone())
# print(cur.fetchone())
# print(cur.fetchone())
# 如何移动游标;relative: 相对的, 相对当前游标向前还是向后移动;
# 'absolute'默认移动到最开始;
# cur.scroll(2,'relative')
# print(cur.fetchone())
# cur.scroll(5, 'absolute')
# print(cur.fetchone())
# print(cur.fetchall())
try:
with open('/tmp/users.txt', 'w') as f:
for userinfo in cur.fetchall(): # userinfo=('name', 'passwd')
info = ":".join(userinfo)
f.write(info+'\n')
except Exception as e :
print(e)
print(FAIL + "sql execute failed"+ END)
else:
print(OKGREEN + "sql execute success" + END)
conn.close()
cur.close()
注:我们这里只是调取了数据库的内容,并没有对它进行任何的操作,所以无需提交。
我们进到我们的/tmp/users.txt查看;
这样看起来就像是我们希望看到的结果。