在Python开发中,pymysql是操作MySQL数据库的主流第三方库,它完全兼容Python3,支持所有标准的MySQL操作,不需要依赖其他额外的数据库驱动,使用起来简单高效。下面会逐步讲解pymysql操作MySQL的完整流程。

环境准备
使用pymysql之前需要先安装对应的库,通过pip命令即可完成安装,执行以下命令:
pip install pymysql
安装完成后,需要先确保本地或者远程的MySQL数据库服务已经启动,并且已经创建了对应的数据库和表结构,后续的操作都会基于已有的数据库资源展开。
建立数据库连接
操作MySQL的第一步是创建连接对象,pymysql提供了connect方法用于建立到MySQL数据库的连接,需要传入数据库地址、端口、用户名、密码、数据库名等必要参数。
以下是创建连接的基础示例:
import pymysql
# 建立数据库连接
conn = pymysql.connect(
host='127.0.0.1', # 数据库地址
port=3306, # 端口号,默认3306
user='root', # 用户名
password='123456', # 密码
database='test_db', # 要操作的数据库名
charset='utf8mb4' # 字符集,避免中文乱码
)
# 使用完成后需要关闭连接
# conn.close()
如果连接参数正确,上述代码就能成功创建连接对象,后续的所有数据库操作都会基于这个连接对象进行。
核心操作:增删改查
查询操作
查询操作需要用到游标对象,游标用于执行SQL语句并获取返回结果,pymysql默认返回的是元组形式的结果,也可以通过设置返回字典形式的结果方便后续处理。
以下是查询数据的示例:
import pymysql
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123456',
database='test_db',
charset='utf8mb4'
)
# 创建游标对象,设置返回字典形式的结果
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 执行查询SQL
sql = "SELECT id, name, age FROM user WHERE age > %s"
cursor.execute(sql, (18,)) # 使用参数化查询,避免SQL注入
# 获取所有结果
result = cursor.fetchall()
print(result)
# 也可以获取单条结果
# single_result = cursor.fetchone()
cursor.close()
conn.close()
插入操作
插入数据属于写操作,执行完成后需要提交事务才能让数据真正写入数据库,pymysql默认开启了事务,所以必须调用commit方法提交。
插入操作示例:
import pymysql
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123456',
database='test_db',
charset='utf8mb4'
)
cursor = conn.cursor()
# 插入单条数据
insert_sql = "INSERT INTO user (name, age) VALUES (%s, %s)"
cursor.execute(insert_sql, ('张三', 20))
# 插入多条数据
insert_many_sql = "INSERT INTO user (name, age) VALUES (%s, %s)"
data_list = [('李四', 22), ('王五', 25)]
cursor.executemany(insert_many_sql, data_list)
# 提交事务
conn.commit()
cursor.close()
conn.close()
更新操作
更新操作和插入操作类似,同样需要提交事务,执行完成后数据才会生效。
更新操作示例:
import pymysql
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123456',
database='test_db',
charset='utf8mb4'
)
cursor = conn.cursor()
update_sql = "UPDATE user SET age = %s WHERE name = %s"
cursor.execute(update_sql, (23, '张三'))
# 提交事务
conn.commit()
cursor.close()
conn.close()
删除操作
删除操作也是写操作,需要提交事务,执行前需要确认条件是否正确,避免出现误删数据的情况。
删除操作示例:
import pymysql
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123456',
database='test_db',
charset='utf8mb4'
)
cursor = conn.cursor()
delete_sql = "DELETE FROM user WHERE id = %s"
cursor.execute(delete_sql, (1,))
# 提交事务
conn.commit()
cursor.close()
conn.close()
事务处理技巧
如果执行写操作过程中出现错误,需要回滚事务避免数据不一致,可以通过try-except结构实现事务的回滚逻辑。
事务处理示例:
import pymysql
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123456',
database='test_db',
charset='utf8mb4'
)
cursor = conn.cursor()
try:
insert_sql = "INSERT INTO user (name, age) VALUES (%s, %s)"
cursor.execute(insert_sql, ('赵六', 28))
# 模拟错误场景
# raise Exception("执行出错")
conn.commit()
print("操作成功")
except Exception as e:
print(f"操作失败,原因:{e}")
conn.rollback()
finally:
cursor.close()
conn.close()
常见问题解决
- 连接失败:检查MySQL服务是否启动,host、port、用户名、密码是否正确,数据库是否存在。
- 中文乱码:连接时设置charset为utf8mb4,确保数据库和表的字符集也是utf8mb4。
- SQL注入风险:不要直接拼接SQL字符串,使用参数化查询,将参数通过execute方法的第二个参数传入。
- 游标未关闭:每次操作完成后及时关闭游标和连接,避免资源占用过高。
pymysqlmysqlpython_database_operationsql_query修改时间:2026-06-10 19:33:39