python操作mysql数据库api 作者:马育民 • 2019-06-13 09:07 • 阅读:10544 # 概述 本文讲解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() ``` 原文出处:http://malaoshi.top/show_1EF3VUKlBOrg.html