PyMySQL是Python操作数据库的模块,在Python3.x版本中用于连接MySQL服务器,即作为Python操作MySQL数据库对象的接口。
安装PyMySQL
pip3 install PyMySQL
导入PyMySQL
import pymysql
连接数据库
格式:conn = pymysql.connect(host=' ', port=' ', user=' ', passwd=' ', db=' ', charset=' ');
host:MySQL服务器的IP地址。
port:服务器端口号,默认为3306。如果省略不写,则为默认值。
user:登陆数据库的用户名。
passwd:登陆密码。
db:要连接的数据库。
charset:设置编码。
连接我的数据库实例:conn = pymysql.connect(host='localhost', user='root', passwd='root0605', db='mydemo', charset='utf8');
操作数据库
创建了数据库连接实例对象(上面的conn)后,可以进行数据库的操作。通过实例对象操作数据库的方法很多,可通过help()具体查看。以下为较常用的方法。
commit():提交保存当前的数据。
rollback():回滚取消当前的操作。
cursor():创建连接的游标对象,通过游标执行SQL语句。
close():关闭数据库连接。
Python是通过游标执行SQL语句的,建立连接后,要利用对象得到游标对象。
cur = conn.cursor()
利用游标对象操作数据库的方法很多,可使用help()查看具体方法,以下是常用的游标方法。
execute():执行一条SQL语句,可以带参数。
executemany(query, seq):对序列seq中的每个参数执行SQL语句。
fetchone():返回一条查询结果。
fetchall():返回所有查询结果。
fetchmany(size):返回size条结果。
nextset():移动到下一个结果。
scroll(value, mode='relative'):移动游标到指定行,如果mode='relative',则表示从当前所在行移动value条,如果mode='absolute',则表示从结果集的第一行移动value条。
close():关闭游标,之后游标不可用。
操作数据库实例:
# 连接数据库: >>> conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='root0605', db='mydemo', charset='utf8') # 创建游标对象: >>> cur = conn.cursor() # 执行数据插入: >>> sql = "insert into stu(id, name) values(2, '李四')" # 插入一条数据 >>> cur.execute(sql) 1 >>> cur.execute("insert into stu values(3, '王舞')") # 直接插入一条数据 1 >>> cur.execute("insert into stu(id, name) values(%s, %s)", (4, '阳阳')) # 通过参数形式插入 >>> conn.commit() # 最后一定要执行数据提交 >>> cur.executemany("insert into stu(id, name) values(%s, %s)", ((5, '曲奇'), (6, '文物'), (7, '谔谔'), (8, '冉冉'), (9, '天天'), (10, '噢噢'))) # executemany方法插入多条数据 6 >>> conn.commit() # 执行数据删除: >>> cur.execute("delete from stu where id=10") 1 >>> conn.commit() # 执行数据修改: >>> cur.execute("update stu set name='张三2' where id=1") 1 >>> conn.commit() # 执行数据查询: >>> cur.execute("select * from stu") 9 # 这表示从stu表中查出来9条记录
通过上面的查询方式,只会查出表中记录的数据条数,要显示具体的数据,则得用到游标对象的fetchall()、fetchmany(size=None)、fetchone()、scroll(value, mode='relative')等方法。
>>> lines = cur.fetchall() # 使用fetchall()方法取出所有数据,只能取一次 >>> for line in lines: ... print(line) ... (1, '张三2') (2, '李四') (3, '王舞') (4, '阳阳') (5, '曲奇') (6, '文物') (7, '谔谔') (8, '冉冉') (9, '天天') >>> cur.execute("select * from stu") 9 >>> cur.fetchone() # 一条一条的取出数据 (1, '张三2') >>> cur.fetchone() # 类似于读取文件的方式 (2, '李四')
用cur.execute()从数据库查询出来的数据,保存在cur对象空间中,需要用fetchall()、fetchmany(size=None)、fetchone()、scroll(value, mode='relative')等方法去读取查询出来的数据。返回值是一个元组对象。
通过以上的方法读取数据时,游标对象cur会移动,所以数据会一条一条的读出,读取完成后,游标移动到数据的尾部。类似于文件的读取。
>>> cur.fetchall() # 读取完剩下的数据 ((4, '阳阳'), (5, '曲奇'), (6, '文物'), (7, '谔谔'), (8, '冉冉'), (9, '天天')) >>> cur.fetchall() # 继续读取,返回空元组 () # 通过scroll()方法能够移动游标的位置,默认一定方式是相对移动,即相对当前的位置像前后向后移动游标位置。 >>> cur.scroll(-7) # 从当前位置向后移动 >>> cur.fetchone() (3, '王舞') >>> cur.scroll(3) # 从当前位置向前移动 >>> cur.fetchone() (7, '谔谔') # 除了相对位置的移动,还有绝对位置的移动,给scroll()方法传入参数absolute,即相对于位置0的移动。 >>> cur.scroll(3, 'absolute') # 绝对位置移动 >>> cur.fetchone() (4, '阳阳') fetchmany(size=None)方法实现从当前位置读取指定条数的数据。 >>> cur.fetchmany(3) # 从当前游标位置读取下面的三条数据 ((5, '曲奇'), (6, '文物'), (7, '谔谔'))
rowcount:是一个只读属性,返回执行execute()方法后影响的行数。
Python在连接对象的游标方法中提供了一个参数,可以实现读取到的数据变成字典的形式。
>>> cur = conn.cursor(pymysql.cursors.DictCursor) # 创建游标对象时指定字典参数 >>> cur.execute("select * from stu limit 5") 5 >>> cur.fetchall() [{'id': 1, 'name': '张三2'}, {'id': 2, 'name': '李四'}, {'id': 3, 'name': '王舞'}, {'id': 4, 'name': '阳阳'}, {'id': 5, 'name': '曲奇'}] # 数据显示成字典格式
关闭游标对象和数据库连接对象
>>>cur.close()
>>>conn.close()