Python_day13--mysql的连接数据库、写入单条或批量写入操作、读取表中的数据

一、创建与数据库的连接

首先我们要导入pymysql模块

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()

注意:我们每次在对数据库进行操作之后我们都要进行提交,并且关闭游标和连接

查看我们上传的数据

二、python的可视化结果

我们可以自己封装一个颜色模块,给我们的执行结果看起来更加的直观;我们在写后面的代码时都可以调用这个模块;
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中操作:在你的文件夹下把这个脚本添加进电脑的搜索路径中;

添加之后方可使用你自己封装的包;不要使用数字开头,数字开头的包导入会有问题;

三、给mysql数据库插入多条数据

假设我们要插入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()

我们在捕获错误时,可以把错误打印出来,这样方便我们去排错


插入成功,可视化给我们很直观的表达

四 、查看表中的内容

1、每次查看单条表中内容
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查看;

这样看起来就像是我们希望看到的结果。





猜你喜欢

转载自blog.csdn.net/biu_biu_0329/article/details/80585203