PyMySQL 是纯 Python 写的,安装和部署非常方便,也是很多 Python Web 框架(如 Django、Flask)常用的驱动。
1
PyMySQL vs mysql-connector
特性 | PyMySQL | mysql-connector |
作者 | 社区开源 | MySQL官方 |
实现方式 | 纯Python(安装快,无需编译) | 含 C 扩展 (通常性能略优) |
安装 | pip install PyMySQL | pip install mysql-connector |
语法风格 | 几乎一样 | |
占位符 | %s |
结论:两者都很稳定。PyMySQL 在虚拟环境和某些 Linux 系统上部署更省心,因为它不需要安装 C 编译器。
2
连接数据库
import pymysql# 1.建立连接,参数几乎和 mysql-connector 一样mydb = pymysql.connect(host="127.0.0.1",user="root",password="123456",database="my_db")# 2.创建游标对象mycursor = mydb.cursor()# 3.执行sql语句mycursor.execute("SHOW DATABASES")for i in mycursor:print(i)# 4.关闭数据库mydb.close()
如上代码所示,PyMySQL的API和mysql-connector极其相似,如果已经掌握了mysql-connector的用法,完全可以照搬照套。
3
基本操作
建表
import pymysql# 1.连接数据库mydb = pymysql.connect(host="127.0.0.1",user="root",password="123456",database="my_db")# 2.创建游标对象mycursor = mydb.cursor()# 3.建表sql = """CREATE TABLE users (name VARCHAR(50) NOT NULL,age INT)"""mycursor.execute(sql)mydb.close()
插入数据
import pymysqlmydb = pymysql.connect(host="127.0.0.1",user="root",password="123456",database="my_db")mycursor = mydb.cursor()# 插入数据sql = """INSERT INTO users (name,age) VALUES (%s, %s)"""value = ("张三", 32)mycursor.execute(sql, value)mydb.commit()# 批量插入values = [("李四", 24), ("王五", 28)]mycursor.executemany(sql, values)mydb.commit()mydb.close()
commit()和rollback()
这两个方法是数据库事务管理的核心。 操作数据库时,你的操作并不是“写一句生效一句”,而是被包裹在一个事务里。
开启事务:在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。
commit() (提交):提交数据到数据库。执行 commit(),数据就永久保存了,哪怕下一秒断电,数据也在硬盘里。类似于存档。你按下存档键,系统把你在内存里的所有改动一次性写入硬盘。此时,数据真正落地,别人也能看到了。
rollback() (回滚):撤销当前事务中所有未提交的更改,把数据状态恢复到你开始这次事务之前的样子。类似于“撤回”或者“读档”。比如你的操作错了,你想反悔。rollback() 会把数据库恢复到这次操作之前的状态,就像什么都没发生过一样。
在写增删改(INSERT/UPDATE/DELETE)代码时,一定要用 try...except 包裹,成功就 commit,失败就 rollback,这是保护数据一致性常规方法。
import pymysqlfrom pymysql import Errordb = Nonecursor = Nonetry:# 1.建立连接db = pymysql.connect(host="127.0.0.1",user="root",password="123456",database="my_db")with db.cursor() as cursor:# 2.执行sqlsql = "INSERT INTO users (name,age) VALUES (%s,%s)"value= ("赵六", 18)cursor.execute(sql,value)# 3.提交db.commit()print(f"插入成功")except Error as e:print(f"错误:{e}")if db: # 4.回滚db.rollback()finally:if db: # 5.关闭db.close()
4
拓展
在 PyMySQL 中,连接数据库时可以设置 cursorclass=pymysql.cursors.DictCursor。如下:
import pymysqlmydb = pymysql.connect(host="127.0.0.1",user="root",password="123456",database="my_db",cursorclass=pymysql.cursors.DictCursor)mycursor = mydb.cursor()mycursor.execute("SELECT * FROM users")result = mycursor.fetchall()print(result)
默认情况输出元组:(('赵六', 18),),返回的数据不知道列名,只能靠下标访问。
使用 DictCursor 后,查出来的数据,变成了字典:[{'name': '赵六', 'age': 18}],可以用 data['name'] 来取值,便于转换成json格式,与前端进行数据交换时更轻松。

长按或扫描下方二维码,免费获取 Python公开课和大佬打包整理的几百G的学习资料,内容包含但不限于Python电子书、教程、项目接单、源码等等
▲扫描二维码-免费领取
推荐阅读
MATLAB vs Python:谁才是建模界的“全能王”?
点击 阅读原文了解更多