MySQL versions from 3.23 to 5.5;
5.0 or newer recommended.
MariaDB should also work.
有趣的是,不管是 PyMySQL,还是 MySQL-python,或者后来取而代之的 mysqlclient,它们在用法上几乎完全一致:都是基于 Python database API version 2.0,这个标准也被称作 PEP-0249。这意味着,我们不用修改代码,就可以更换数据库客户端。下面的应用实例证明了这一点:除了模块名字不一样,其余代码完全一致。
>>>import pymysql
>>> db = pymysql.connect(
host ='localhost',
user ='xufive',
password ='********',
db ='demo',
charset ='utf8')>>> cursor = db.cursor()>>> cursor.execute('select * from member where id = %s',(100,))1>>>print(cursor.fetchall())((100,'370103********0012','*9EE8E3304D69C3E9260F19C224EA5852129BF030','王茁洋','男', datetime.date(****,**,**),'','济南','济南泉景小学','186********', Decimal('1812.50')),)>>> cursor.close()>>> db.close()
>>>import MySQLdb.cursors
>>> db = MySQLdb.connect(
host ='localhost',
user ='xufive',
password ='********',
db ='demo',
charset ='utf8',
cursorclass = MySQLdb.cursors.DictCursor
)>>>with db.cursor()as cursor:
sql ='select * from member where id = %s'
cursor.execute(sql,(100,)
)print(cursor.fetchall())1({'id':100,'idcard':'370103********0012','passwd':'*9EE8E3304D69C3E9260F19C224EA5852129BF030','name':'王茁洋','sex':'男','birthday': datetime.date(****,**,**),'title':'','address':'济南','club':'济南泉景小学','phone':'186********','rating': Decimal('1812.50')},)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
姿势3:事务回滚
事务是关系型数据库的重要特性,NoSQL数据库、分布式数据库通常会淡化、甚至放弃事务。所谓事务是将一组DML(insert、update、delete)语句组合在一起形成一个逻辑单元,这些操作要么全部执行成功提交(commit),如果不成功就要回退到事务开始之前的状态(rollback),以确保不会停留在错误的中间状态。下面的代码演示了 MySQL 典型的事务回滚应用。
>>>import pymysql
>>> db = pymysql.connect(
host ='localhost',
user ='xufive',
password ='********',
db ='demo',
charset ='utf8')deftransaction(db):try:
db.begin()# 此处加入出错之后需要回滚的DML(insert、update、delete)语句
db.commit()returnTrueexcept:
db.rollback()returnFalse