Python3连接MySQL
Python连接MySQL的工具类
目前主要有以下这些
MySQLDB http://mysql-python.sourceforge.net/MySQLdb.html, https://github.com/farcepest/MySQLdb1, https://github.com/farcepest/moist
PyMySQL/mysqlclient-python https://github.com/PyMySQL/mysqlclient-python
PyMySQL/PyMySQL https://github.com/PyMySQL/PyMySQL
mysql-connector-python https://github.com/mysql/mysql-connector-python
其中, MySQLDB是用python包装的底层使用C写的连接器, 两个版本MySQLDB1, moist都已经不再更新.
mysqlclient-python 和 PyMySQL都是同一个作者维护的, 一个是基于C的连接器, 另一个是纯Python的连接器, 这个是现在用得最多的.
mysql-connector-python是Oracle官方团队写的一个纯python的连接器, 性能和PyMySQL差不多, 另外因为license问题不能直接通过PyPi安装.
如果对性能要求较高, 可以采用mysqlclient-python, 如果只是普通使用, 可以采用PyMySQL
PyMySQL的安装
pip3 install pymysql
使用PyMySQL
查单条
import pymysql db = pymysql.connect("localhost","testuser","test123","TESTDB" ) cursor = db.cursor() cursor.execute("SELECT VERSION()") data = cursor.fetchone() print ("Database version : %s " % data) db.close()
查多条
import pymysql db = pymysql.connect("localhost","testuser","test123","TESTDB" ) cursor = db.cursor() sql = "SELECT * FROM EMPLOYEE WHERE INCOME > %s" % (1000) try: cursor.execute(sql) results = cursor.fetchall() for row in results: fname = row[0] lname = row[1] age = row[2] sex = row[3] income = row[4] print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % (fname, lname, age, sex, income )) except: print ("Error: unable to fetch data") db.close()
增
import pymysql.cursors # Connect to the database connection = pymysql.connect(host='localhost', user='user', password='passwd', db='db', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) try: with connection.cursor() as cursor: # Create a new record sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)" cursor.execute(sql, ('webmaster@python.org', 'very-secret')) # connection is not autocommit by default. So you must commit to save # your changes. connection.commit() with connection.cursor() as cursor: # Read a single record sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s" cursor.execute(sql, ('webmaster@python.org',)) result = cursor.fetchone() print(result) finally: connection.close()
.
注意事项
1. 在sql中如果出现了 % 符号作为sql的一部分, 但是在execute时又需要带入参数, 这时候会出现 ValueError: unsupported format character 错误. 因为pymysql会错误的认为这个%符号是未正确拼写的格式化字符串的一部分. 这时候需要将 % 转义, 写为 %%. 例如
CASE CAST(SUBSTRING(u.identity_number, 17, 1) AS SIGNED) %% 2 WHEN 0 THEN '女' ELSE '男' END `gender`,