概述
本文讲解python操作mysql数据库
本教程使用mysql官方出的驱动
要求
- 新版本的驱动,要求 python3.7以上,之前的版本,会报错
- mysql数据库必须是
5.6以上版本
下载安装驱动
参见官方网址:
https://dev.mysql.com/doc/connector-python/en/connector-python-installation-binary.html
pip install mysql-connector-python
数据库操作
参见连接:
https://dev.mysql.com/doc/connector-python/en/connector-python-examples.html
导入模块
import mysql.connector
连接数据库
第一种方法:
# coding=utf-8
import mysql.connector
try:
conn=mysql.connector.connect(user='root',
password='',
host='127.0.0.1',
port='3306',
database='std_python',
buffered=True #缓冲游标模式
)
except mysql.connector.Error as e:
print('connect fails!{}'.format(e))
缓冲游标模式参见下面
第二种方法:
config={'host':'127.0.0.1',#default localhost
'user':'root',
'password':'',
'port':3306 ,
'database':'std_python',
'charset':'utf8',#默认即为utf8
'buffered': True,#缓冲游标模式
}
try:
cnn = mysql.connector.connect(**config)
except mysql.connector.Error as e:
print('connect fails!{}'.format(e))
缓冲游标模式参见下面
连接对象Connection
有以下4个作用:
- 关闭连接
- 获取游标(后面介绍)
- 提交事务
- 回滚事务
提交事务
conn.commit()
回滚事务
conn.rollback()
关闭连接
数据库资源很重要,用完之后要及时关闭连接
conn.close()
游标
作用
通过游标对数据库执行 增删改查 操作
游标的种类
非缓冲游标
缓冲游标
MySQLCursorPrepared游标
非缓冲游标
同 非缓冲游标 执行查询后,不会从数据库获取数据,直到调用fetchall()、fetchone()时,才从数据库获取数据。
必须确保在该连接上,执行任何其他语句之前,获取结果集的所有行,否则将引发异常:
InternalError(Unread Result Found)
获取结果集前,关闭游标也会抛异常,所以 不推荐使用 非缓冲游标
缓冲游标
执行查询后,从数据库获取所有数据,并缓冲到本地(放入到内存)
在调用fetchall()、fetchone()时,从缓冲(内存)中读取数据
推荐使用缓冲游标
非缓冲游标与缓冲游标的区别:
https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursorbuffered.html
MySQLCursorPrepared游标
此游标用于执行预编译SQL
官方文档:
https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursorprepared.html
获取 默认游标
cursor=conn.cursor()
用这种方式获取的游标,其游标模式,是连接数据库时指定的
获取 非缓冲游标
cursor=conn.cursor(buffered=False)
获取 缓冲游标
cursor=conn.cursor(buffered=True)
获取 MySQLCursorPrepared游标
cursor = cnx.cursor(prepared=True)
执行增删改查
通过游标对象,对数据库进行 增删改查 操作:
- 执行sql语句
- 获取查询结果(执行select语句)
- 获取行数
- 如果执行select语句,返回查询结果的行数
- 如果执行insert语句,返回插入的行数
- 如果执行update语句,返回更新的行数
- 如果执行delete语句,返回删除的行数
- 关闭游标
执行sql语句
cursor.execute(operation, params=None)
参数:
- operation:sql语句
- params:当sql语句有占位符时,此参数是与占位符对应的参数,可以是list、tuple、dict
获取所有查询结果
cursor.fetchall()
返回值:
list类型,list中的元素表示一行记录,类型是tuple
tuple中的元素表示每一列
获取查询结果的下一行
cursor.fetchone()
返回值:
tuple类型,tuple中的元素表示每一列
获取查询结果的下几行
cursor.fetchmany(size)
参数:
- size:几行
返回值:
list类型,list中的元素表示一行记录,类型是tuple
tuple中的元素表示每一列
获取增删改查的行数
cursor.rowcount
关闭游标
游标用完后应及时关闭
cursor.close()