引入pymysql库
以下都为Python3的通用操作流程,我编写此博客的时候Python2已被全面淘汰。
第一步,下载pymysql库
方法一:添加到全局(如果使用的pycharm请使用方法二)
pip install pymysql
方法二:在pycharm中添加(pycharm会创建一个局部环境,在全局中添加的库在pycharm中是使用不了的)
添加好后使用import pymysql
来引入库
连接数据库
连接数据库我们要用的pymysql中的connect类
常用connect传入参数 | 作用 |
---|---|
host | 传入指定服务器ip(本地ip为127.0.0.1) |
port | 服务器的MySQL端口号(一般都是3306) |
db | database的简写,可以写成database,选择使用的数据库 |
user | MySQL数据库的用户名 |
passwd | password的简写,可以写成password,MySQL数据库密码 |
charset | 选择字符集(常用uft8) |
connect的传入参数远不止这些,不过其中大多数我们都不需要使用,如果需要,可自行查看源码。
mysql = pymysql.connect(host='127.0.0.1', port=3306, db='demo', user='root', passwd='root', charset='utf8')
制作游标
我们之前使用mysql将数据库实例化,我们现在调用myql中的cursor方法来获取游标。
cur = mysql.cursor()
增删改查
拿到游标后,我们就可以在此游标中使用增删改查等数据库常用操作,这里可以改查可以看我的另一篇博客数据库的增删改查(surd)有哪些操作?
游标中的方法
我们获取到游标cur后,需要用到其中几个方法才能真正的操作数据库
execute方法(执行语句)
执行语句我们需要用到游标.execute()
例如我们想要查看所有行数
all_mysql = cur.execute('select * from 寻觅的测试表;')
我们发现这里输出的数据并不是我们想要的数据,这是输出的是数据行数,我们有两行数据所以输出2.因为execute是用来执行SQL语句的,并不负责输出数据
获取游标中的数据
当我们的SQL语句有返回值时候(比如说读取数据库),我们就需要用到如下几个方法去获取SQL的返回值。
输出数据我们使用
游标.fetchone()
获取一条数据游标.fetchmany()
获取多条数据游标.fetchall()
获取全部数据
如果需要获取数据,必须要先执行游标.execute()
指定一个具体的表,否则会报错。
# 执行MySQL语句
all_mysql = cur.execute('select * from 寻觅的测试表;')
print(all_mysql)
# 获取数据库中的内容
data = cur.fetchone()
print(data)
data = cur.fetchone()
print(data)
data = cur.fetchone()
print(data)
data = cur.fetchmany(2)
print(data)
data = cur.fetchall()
print(data)
提交事务与回滚
如果你经常使用Innodb这类支持事务的存储引擎,应该对提交事务和回滚有一些影响。在pymysql中事务是默认开启的,在执行修改数据库的命令后如果不进行提交,哪数据库是无法正常修改的。
提交事务语法:mysql.commit()
回滚语法:mysql.rollback()
注意:提交事务和回滚不是游标的方法,而是连接的方法(pymysql.connect()的方法)
all_mysql = cur.execute('select * from 寻觅的年龄连接表;')
print(cur.fetchall())
cur.execute("insert into 寻觅的年龄连接表 values(10, '我最大');")
mysql.commit()
all_mysql = cur.execute('select * from 寻觅的年龄连接表;')
print(cur.fetchall())
cur.execute("insert into 寻觅的年龄连接表 values(9, '最大是我');")
mysql.rollback()
all_mysql = cur.execute('select * from 寻觅的年龄连接表;')
print(cur.fetchall())
清除游标与关闭连接
必须先清除游标,在关闭数据库,否则会出现不可预知的错误。
- 清除游标
游标.close
- 关闭连接
数据库.close
# 清除游标
cur.close()
# 关闭连接
mysql.close()
关闭连接和游标后,还是能通过fetchall方法读取到游标中的缓存,这个可以在结束后给游标赋个空值cur = None
或者del游标del cur
即可。
总结
方法 | 作用 |
---|---|
pymysql.connect() | 连接数据库 |
mysql.cursor() | 获取游标 |
cur.execute() | 执行SQL语句 |
cur.fetchone | 输出单行 |
cur.fetchmany() | 输出多行 |
cur.fetchall() | 输出全部 |
mysql.commit() | 提交事务 |
mysql.rollback() | 回滚 |
cur.close() \ mysql.close() | 清除关闭(先游标后连接) |