使用 pymysql
库来操作 MySQL 数据库是 Python 开发中常见的一种方式。pymysql
是一个纯 Python 实现的 MySQL 客户端库,支持 Python 3.x 版本,功能强大且易于使用。下面我将详细介绍如何使用 pymysql
来连接、查询、插入、更新和删除 MySQL 数据库中的数据。
在使用 pymysql
之前,你需要确保已安装该库。可以通过 pip 来安装:
pip install pymysql
在使用 pymysql
操作数据库之前,首先要建立与数据库的连接。下面的代码展示了如何连接到数据库:
import pymysql
# 打开数据库连接
connection = pymysql.connect(
host='localhost', # 数据库地址
user='root', # 用户名
password='password',# 密码
database='mydb', # 要连接的数据库名
charset='utf8mb4', # 编码设置
)
# 创建一个游标对象
cursor = connection.cursor()
一旦连接建立,就可以使用游标对象来执行 SQL 查询。pymysql
支持多种 SQL 执行方式,包括查询、插入、更新和删除数据。
1. 查询数据
sql = "SELECT * FROM my_table"
cursor.execute(sql)
# 获取所有记录
records = cursor.fetchall()
for record in records:
print(record)
2. 插入数据
插入数据时,可以使用 execute()
方法,并且可以通过参数化查询来避免 SQL 注入风险。
sql = "INSERT INTO my_table (name, age) VALUES (%s, %s)"
values = ("John Doe", 28)
try:
cursor.execute(sql, values)
connection.commit() # 提交事务
except Exception as e:
connection.rollback() # 回滚事务
print(f"Error: {e}")
3. 更新数据
更新某条数据时,需指定条件。
sql = "UPDATE my_table SET age = %s WHERE name = %s"
values = (30, "John Doe")
try:
cursor.execute(sql, values)
connection.commit()
except Exception as e:
connection.rollback()
print(f"Error: {e}")
4. 删除数据
删除数据时同样需要小心,特别是条件的书写。
sql = "DELETE FROM my_table WHERE name = %s"
value = ("John Doe",)
try:
cursor.execute(sql, value)
connection.commit()
except Exception as e:
connection.rollback()
print(f"Error: {e}")
pymysql
默认开启事务控制。这意味着你对数据库的所有变更操作(插入、更新、删除)必须明确提交(commit)才能生效,否则可以选择回滚(rollback)撤销变更。
为了防范 SQL 注入攻击,始终建议使用参数化查询来执行 SQL 语句。pymysql
支持参数化查询,你可以使用 execute()
函数的第二个参数来传递参数值。
执行查询后,可以通过 fetchall()
, fetchone()
, fetchmany(n)
三种方法方法来获取查询结果。
fetchall()
:获取全部结果。fetchone()
:获取下一行结果。fetchmany(size)
:获取指定数量的结果。操作结束后,务必关闭游标和连接,以释放数据库资源。
cursor.close()
connection.close()
在执行数据库操作时,难免会遇到异常。因此,*在操作数据库的过程中加入异常处理机制。
try:
# 数据库操作
except pymysql.MySQLError as e:
print(f"Error: {e}")
finally:
cursor.close()
connection.close()
对于大规模应用,为每个请求都单独打开一个新的数据库连接可能会比较耗资源。可以考虑使用连接池库如 DBUtils
来提高数据库连接的管理能力。
pymysql
库提供了对 MySQL 数据库的强大支持,能够很好地与 Python 集成,支持多种操作数据库的方式,包括基本的增删改查。同时,通过使用有效的异常处理、参数化查询以及连接池等技术,可以使你的数据库代码更为安全和高效。