利用python连接MySQL数据库
1、准备工作:
(1)事先在系统中已经安装好mysql数据库
(2)在系统控制台通过pip install pymysql
,安装python的第三方数据库模块
2、利用python连接数据库
#导入模块
import pymysql
# 连接数据库
conn = pymysql.connect(host="127.0.0.1",user="root",password="123",database="test",charset="utf8")
需要注意的是:为避免出现中文乱码,最好填写charset="utf8",中间没有"-",若写成"utf-8"是错误的。
如果觉得麻烦的话,有个方法,首先找到系统中pymysql包安装的位置,在cmd中输入pip show 模块名
即可找到。
然后进入"pymysql"文件夹,找到里面的"connections.py"文件并打开,"ctrl+F"找到"charset"默认情况下是空值,输入"utf8",同样不需要"-"。
到此你就完成了对系统中的数据库的连接。
3、创建数据库表格
#获取一个光标对象
cursor = conn.cursor()
#定义一个sql语句
sql = '''
create table employee(
eid char(10) not null,
ename char(10),
whno char(10),
salary float,
primary key(eid)
)
'''
# 执行sql语句
cursor.execute(sql)
# 关闭光标对象
cursor.close()
# 关闭数据库连接
conn.close()
4、增、删、改操作
import pymysql
conn = pymysql.connect(host='localhost', user='root', password='123', db='test', charset='utf8')
cursor = conn.cursor()
# 增操作
sql = "insert into employee values ('001', '王三', '301', 1000.0)"
cursor.execute(sql)
# 也可同时插入多条数据
# sql = "insert into employee values ('%s')"
# cursor.executemany(sql,[('001', '王三', '301', 1000.0),('002', '李四', '302', 3000.0)])
# 改操作
# sql = "update employee set ename = "小李" where id = '001'"
# cursor.execute(sql)
# 删操作
# sql = "delete from employee where eid = '001'"cursor.execute(sql)
#一定记得commit
conn.commit()
cursor.close()
conn.close()
这里值得注意的是,必须要在完成操作之后使用commit()
命令进行提交,否则操作的数据不生效。
5、数据的查询操作
fetchone()
:获取下一行数据,第一次为首行;
fetchall()
:获取所有行数据源
fetchmany(n)
:获取n行数据
(1)使用fetchone():
import pymysql
conn = pymysql.connect(host='localhost', user='root', password='123', db='test', charset='utf8')
cursor = conn.cursor()
sql = 'select * from employee'
cursor.execute(sql)
rst = cursor.fetchone()
print(rst)
# 查询第二行数据
next_rst = cursor.fetchone()
print(next_rst)
cursor.close()
conn.close()
运行结果:
('001', '王三', '301', 1000.0)
('002', '李四', '302', 3000.0)
>>>
(2)使用fetchall():
import pymysql
conn = pymysql.connect(host='localhost', user='root', password='123', db='test', charset='utf8')
cursor = conn.cursor()
sql = 'select * from employee'
cursor.execute(sql)
# 获取所有的数据
rsts= cursor.fetchall()
print(rsts)
cursor.close()
conn.close()
运行结果:
(('001', '王三', '301', 1000.0), ('002', '李四', '302', 3000.0))
>>>
默认情况下,我们获取到的返回值是元组,只能看到每行的数据,却不知道每一列代表的是什么,这个时候可以使用以下方式来返回字典,每一行的数据都会生成一个字典:
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
在fetchone示例中,在获取行数据的时候,可以理解开始的时候,有一个行指针指着第一行的上方,获取一行,它就向下移动一行,所以当行指针到最后一行的时候,就不能再获取到行的内容,所以我们可以使用如下方法来移动行指针:
cursor.scroll(1,mode='relative') # 相对当前位置移动
cursor.scroll(2,mode='absolute') # 相对绝对位置移动
第一个值为移动的行数,整数为向下移动,负数为向上移动,mode指定了是相对当前位置移动,还是相对于首行移动
import pymysql
conn = pymysql.connect(host='localhost', user='root', password='123', db='test', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = 'select * from employee'
cursor.execute(sql)
# 查询第一行的数据
rst = cursor.fetchone()
print(rst)
# 查询第二行数据
rst = cursor.fetchone()
print(rst)
cursor.scroll(-1,mode='relative') #设置之后,光标相对于当前位置往前移动了一行,所以打印的结果为第二行的数据
rst = cursor.fetchone()
print(rst)
cursor.scroll(0,mode='absolute') #设置之后,光标相对于首行没有任何变化,所以打印的结果为第一行数据
rst = cursor.fetchone()
print(rst)
cursor.close()
conn.close()
结果如下
{'Eid': '001', 'Ename': '王三', 'Whno': '301', 'Salary': 1000.0}
{'Eid': '002', 'Ename': '李四', 'Whno': '302', 'Salary': 3000.0}
{'Eid': '002', 'Ename': '李四', 'Whno': '302', 'Salary': 3000.0}
{'Eid': '001', 'Ename': '王三', 'Whno': '301', 'Salary': 1000.0}
(3)使用fetchmany():
import pymysql
conn = pymysql.connect(host='localhost',user='root', password='123', db='test', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = 'select * from employee'
cursor.execute(sql)
# 获取2条数据
rsts = cursor.fetchmany(2)
print(rsts)
cursor.close()
conn.close()
结果如下:
[{'Eid': '001', 'Ename': '王三', 'Whno': '301', 'Salary': 1000.0}, {'Eid': '002', 'Ename': '李四', 'Whno': '302', 'Salary': 3000.0}]
标签:python,数据库,MySQL,pymysql,cursor,sql,rst,close,conn
From: https://www.cnblogs.com/jasonspace/p/18380619