Py2时代,访问MySQL数据库的模块除了PyMySQL和MySQL-python之外,还有以速度见长的Umysql,以及非常小众的Oursql模块。进入了Py3时代之后,PyMySQL与时俱进,顺利升级到Py3版本,MySQL-python则被它的一个Py3分支——mysqlclient取代,而Umysql和Oursql则停留在了属于它们的那个时代。
下表给出了PyMySQL模块和mysqlclient模块在安装方式,导入方式,支持的Python版本和数据库版本等方面的比较,因为缺少可信的资料,这里没有对两个模块的性能做出比较,不过,PyMySQL明确声明支持最新的MySQL和MariaDB,而mysqlclient关于数据库版本支持的描述显得模棱两可,似是而非,所以很多人也许会把PyMySQL作为首选。但从我们的实际应用来看,mysqlclient并没有受到过数据库版本的限制。我更愿意把版本支持的表述解读为两个开发团队风格不同所致。
PyMySQL
mysqlclient
安装方式
pip安装PyMySQL
pip安装mysqlclient
导入方式
进口pymysql
进口MySQLdb
Python版本
2.7和祝辞=3.4
2.7和祝辞=3.4
数据库版本
MySQL祝辞=5.5
MariaDB祝辞=5.5
MySQL版本从3.23到5.5;
5.0或更新的建议。
MariaDB也应该工作。
有趣的是,不管是PyMySQL,还是MySQL-python,或者后来取而代之的mysqlclient,它们在用法上几乎完全一致:都是基于Python数据库API版本2.0,这个标准也被称作pep - 0249。这意味着,我们不用修改代码,就可以更换数据库客户端。下面的应用实例证明了这一点:除了模块名字不一样,其余代码完全一致。
我们以PyMySQL模块为例,先来看看最常见的用法:以元组形式返回查询记录。如果把代码中的PyMySQL改为MySQLdb,可以轻松切换成mysqlclient模块。
在在在进口pymysql 在在在db=pymysql.connect ( 主机=' localhost ', 用户=' xufive ', 密码=? * * * * * * *”, db=把菔尽? charset=' use utf8 ' ) 在在在光标=db.cursor () 在在在游标。从成员执行(“select * id=% s的,(100年)) 1 在在在print (cursor.fetchall ()) (100年,370103年* * * * * * * * 0012”,“* 9 ee8e3304d69c3e9260f19c224ea5852129bf030”,“王茁洋’,‘男’,datetime。日期(* * * *、* *、* *),”,“济南”、“济南泉景小学”,“186 * * * * * * * *’,小数(1812.50))) 在在在cursor.close () 在在在db.close ()
查询结果以元组形式返回,有很多不便,我们需要知道元组各元素对应的是表结构中的哪一个字段(列)。下面的代码,实现了以字典形式返回查询记录。同样的,如果把代码中的MySQLdb改为pymysql,可以轻松切换成pymysql模块。
在在在进口MySQLdb.cursors 在在在db=MySQLdb.connect ( 主机=' localhost ', 用户=' xufive ', 密码=? * * * * * * *”, db=把菔尽? charset=' use utf8 ', cursorclass=MySQLdb.cursors.DictCursor ) 在在在光标db.cursor (): sql=' select *从会员id=% s ' 游标。execute (sql,(100年)) print (cursor.fetchall ()) 1 ({“id”: 100年,“经办人身份证”:“370103 * * * * * * * * 0012”,“密码”:“* 9 ee8e3304d69c3e9260f19c224ea5852129bf030”、“名称”:“王茁洋”,“性”:“男”、“生日”:datetime。日期(* * * *、* *、* *),标题:”、“地址”:“济南”、“俱乐部”:“济南泉景小学”、“电话”:“186 * * * * * * * *”、“评级”:十进制(1812.50)})
事务是关系型数据库的重要特性,NoSQL数据库,分布式数据库通常会淡化,甚至放弃事务。所谓事务是将一组DML(插入、更新、删除)语句组合在一起形成一个逻辑单元,这些操作要么全部执行成功提交(提交),如果不成功就要回退到事务开始之前的状态(回滚),以确保不会停留在错误的中间状态。下面的代码演示了MySQL典型的事务回滚应用。
在在在进口pymysql 在在在db=pymysql.connect ( 主机=' localhost ', 用户=' xufive ', 密码=? * * * * * * *”, db=把菔尽? charset=' use utf8 ' ) def事务(db): 试一试: db.begin () #此处加入出错之后需要回滚的DML(插入、更新、删除)语句 db.commit () 还真 除了: db.rollback () 返回假浅谈Python访问MySQL的正确姿势