PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。
PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。
执行事务
事务机制可以确保数据一致性。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
- 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
- 一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
- 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
- 持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。
# SQL 语句(增删改查)
sql = "************************"
try:
# 执行SQL语句
cursor.execute(sql)
# 向数据库提交
db.commit()
except:
# 发生错误时回滚
db.rollback()
PyMySQL 安装
在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装。
PyMySQL 下载地址:https://github.com/PyMySQL/PyMySQL。
如果还未安装,我们可以使用以下命令安装最新版的 PyMySQL:
pip install PyMySQL
如果你的系统不支持 pip 命令,可以使用以下方式安装:
1、使用 git 命令下载安装包安装(你也可以手动下载):
git clone https://github.com/PyMySQL/PyMySQL cd PyMySQL/ python3 setup.py install
2、如果需要制定版本号,可以使用 curl 命令来安装:
# X.X 为 PyMySQL 的版本号 curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz cd PyMySQL* python3 setup.py install # 现在你可以删除 PyMySQL* 目录
注意:请确保您有root权限来安装上述模块。
安装的过程中可能会出现"ImportError: No module named setuptools"的错误提示,意思是你没有安装setuptools,你可以访问https://pypi.python.org/pypi/setuptools 找到各个系统的安装方法。
Linux 系统安装实例:
$ wget https://bootstrap.pypa.io/ez_setup.py $ python3 ez_setup.py
连接数据库
我们在一台远程 Linux 服务器上安装好了 mysql 服务,然后我们在 Windows 机器上试着连接操作如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2018/5/6 22:04
# @Author : zhouyuyao
# @File : demon2.py
import pymysql
# 打开数据库连接
db = pymysql.connect("***.***.***.***", "database-user", "database-UserPasswd", "database-name")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute() 方法执行 SQL 查询
cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()
print("Database version : {0} ".format(data),end='') # 输出为元组
# print ("Database version : %s " % data) # 输出为字符串
# 关闭数据库连接
db.close()
# 结果 Database version : ('5.5.56-MariaDB',)
创建表
当我们需要创建新的表时,我们需要先判断数据库中是否存在该表,如果存在则删除,然后再创建,如下所示:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2018/5/6 22:31
# @Author : zhouyuyao
# @File : demon4.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2018/5/6 22:04
# @Author : zhouyuyao
# @File : demon2.py
import pymysql
# 打开数据库连接
db = pymysql.connect("***.***.***.***", "database-user", "database-UserPasswd", "database-name")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
# 使用预处理语句创建表
sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )"""
cursor.execute(sql)
# 关闭数据库连接
db.close()
这时候我们可以看到远程 mysql 服务上已经在连接的数据库中建立了这个名为 “EMPLOYEE ” 的表,
MariaDB [database-name]> show tables;
+-------------------------+
| Tables_in_database-name |
+-------------------------+
| EMPLOYEE |
+-------------------------+
1 row in set (0.00 sec)
MariaDB [database-name]> select * from EMPLOYEE;
Empty set (0.00 sec)
参考资料:
1. http://www.runoob.com/python3/python3-mysql.html
2. https://blog.csdn.net/zhihua_w/article/details/54313258