python操作mysql数据库api

概述

本文讲解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()

原文出处:/show_1EF3VUKlBOrg.html