Python操作MySQL数据库
Python DB API
https://www.python.org/dev/peps/pep-0249/
Python DB API是Python官方提供的一套访问数据库的统一接口规范

在没有Python DB API之前,Python访问数据库的接口程序混乱,当要对业务使用的数据库进行切换时,需要对Python应用程序进行大量的更改,迁移成本相当的高,因此Python官方提供了一套访问数据库的统一接口规范,实现了Python应用程序对多种数据库访问方式的统一。

Python DB API包含的内容

使用Python DB API访问数据库的流程

Python开发MySQL环境的配置
Python2
下载MySQL-Python并安装,安装程序会自动检测Python客户端的位置:
https://sourceforge.net/projects/mysql-python/#
Python3
1 | pip install PyMySQL |
数据库连接对象Connection
- 连接对象:建立Python客户端与数据库的网络连接
- 创建方法:MySQLdb.Connect(参数)/pymysql.connect(参数)
| 参数名 | 类型 | 说明 |
|---|---|---|
| host | 字符串 | MySQL服务器地址 |
| port | 数字 | MySQL服务器端口号 |
| user | 字符串 | 用户名 |
| passwd | 字符串 | 密码 |
| db | 字符串 | 数据库名称 |
| charset | 字符串 | 连接编码 |
- connection对象支持的方法
| 方法名 | 说明 |
|---|---|
| cursor() | 使用该连接创建并返回游标 |
| commit() | 提交当前事务 |
| rollback() | 回滚当前事务 |
| close() | 关闭连接 |
示例代码
1 | create database test |
1 | import pymysql |
游标对象Cursor
- 游标对象:用于执行查询和获取结果
- Cursor对象支持的方法:
| 参数名 | 说明 |
|---|---|
| execute(op[,args]) | 执行一个数据库查询或命令 |
| fetchone() | 取的结果集的下一行 |
| fetchmany(size) | 获取结果集的下几行 |
| fetchall() | 获取结果集中剩下的所有行 |
| rowcount | 最近一次execute返回数据的行数或影响行数 |
| close() | 关闭游标对象 |
演示select数据
流程

示例代码
1 | use test |
1 | import pymysql |
事务
事务:访问和更新数据库的一个程序执行单元
- 原子性:事务中包括的诸操作要么都做,要么都不做
- 一致性:事务必须使数据库从一致性状态变到另一个一致性状态
- 隔离性:一个事务的执行不能被其他事务干扰
- 持久性:事务一旦提交,它对数据库的改变就是永久的
说明
开发过程中一般关闭自动提交事务功能,设置conn.autocommit(False)
演示insert/update/delete数据
流程

示例代码
1 | use test |
1 | import pymysql |
银行转账实例——账户A给账户B转账100元
流程

示例代码
1 | create table account ( |
1 | # -*- coding:UTF8 -*- |
执行结果
G:\PythonProject\python-mysql>python connmysql.py 11 12 100
check_acct_available:select * from account where accountid=11
have_enought_money:select * from account where accountid=11 and money>=100
reduce_money:update account set money=money-100 where accountid=11
add_money:update account set money=money+100 where accountid=12