Python教程:使用pymysql库操作Mysql数据库
一、什么是 pymysql
pymysql
是一个 Python 库,用于连接和操作 MySQL 数据库。通过 pymysql
,Python 程序员可以轻松地与 MySQL 数据库进行交互,执行 SQL 查询,以及插入、更新或删除数据。
主要功能和特点
- 纯 Python 实现:与某些其他 MySQL 库相比,
pymysql
是纯 Python 实现的,不需要任何 C 语言的依赖项。 - 线程安全:
pymysql
是线程安全的,这意味着它可以在多线程环境中安全地使用。 - 连接池支持:虽然
pymysql
本身不提供连接池,但它可以与其他连接池库(如DBUtils
)一起使用,以提供更高效、更稳定的数据库连接。 - 支持大部分 MySQL 功能:
pymysql
支持大部分 MySQL 的 SQL 语法和功能,包括事务、存储过程等。 - 与 Python DB-API 兼容:
pymysql
遵循 Python DB-API 2.0 规范,因此与其他数据库库相比,其使用方式非常相似。 - 安装和使用简单:只需使用
pip install pymysql
命令即可轻松安装。使用上也相对直观和简单。
二、安装 pymysql
安装 pymysql
非常简单,你可以使用 Python 的包管理工具 pip
来完成安装。以下是安装步骤:
-
打开命令行工具(在 Windows 上是 CMD 或 PowerShell,在 macOS 或 Linux 上是 Terminal)。
-
输入以下命令来安装
pymysql
:pip install pymysql
或者,如果你使用的是 Python 3,并且系统中同时安装了 Python 2 和 Python 3,你可能需要使用
pip3
命令:pip3 install pymysql
三、基本使用方法
1. 建立连接
import pymysql
connection = pymysql.connect(
host='localhost', # 数据库服务器地址
user='user', # 数据库用户
password='passwd', # 数据库密码
db='db', # 数据库名称
charset='utf8mb4', # 连接字符集(兼容更多的文字)
cursorclass=pymysql.cursors.DictCursor) # 使用字典游标,返回的结果将是字典形式
2. 执行查询
try:
with connection.cursor() as cursor:
# 执行 SQL 查询语句
cursor.execute("SELECT * FROM `users` WHERE `email`=%s", ('webmaster@python.org',))
# 获取查询结果集中的所有记录
results = cursor.fetchall()
for row in results:
print(row) # 打印每一行结果
finally:
connection.close() # 关闭连接
3. 执行插入、更新或删除操作
对于修改数据的操作,你还需要调用 connection.commit()
来提交更改。
try:
with connection.cursor() as cursor:
# 执行 SQL 插入语句
cursor.execute("INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)", ('webmaster@python.org', 'very-secret'))
# 提交事务
connection.commit()
with connection.cursor() as cursor:
# 更新数据操作...
pass
# 提交事务
connection.commit()
with connection.cursor() as cursor:
# 删除数据操作...
pass
# 提交事务
connection.commit()
finally:
connection.close() # 关闭连接
注意:为了防止 SQL 注入攻击,永远不要直接使用字符串拼接 SQL 语句。始终使用参数化查询,如上面的示例所示。
总之,pymysql
是一个功能强大、易于使用的 Python MySQL 库,适用于与 MySQL 数据库进行交互的各种场景。
四、使用示例
以下是一个包含增(INSERT)、删(DELETE)、改(UPDATE)和查(SELECT)操作的 pymysql
实际使用示例。
import pymysql
# 数据库连接配置
config = {
'host': 'localhost',
'user': 'your_username',
'password': 'your_password',
'db': 'your_database',
'charset': 'utf8mb4',
'cursorclass': pymysql.cursors.DictCursor
}
# 建立数据库连接
connection = pymysql.connect(**config)
try:
with connection.cursor() as cursor:
# 增 - INSERT
sql_insert = "INSERT INTO `users` (`name`, `email`) VALUES (%s, %s)"
cursor.execute(sql_insert, ('Alice', 'alice@example.com'))
connection.commit() # 提交事务
print("Inserted a new user.")
# 查 - SELECT
sql_select = "SELECT * FROM `users` WHERE `email` = %s"
cursor.execute(sql_select, ('alice@example.com',))
result = cursor.fetchone()
print("Retrieved user:", result)
# 改 - UPDATE
sql_update = "UPDATE `users` SET `name` = %s WHERE `email` = %s"
cursor.execute(sql_update, ('Alice Updated', 'alice@example.com'))
connection.commit() # 提交事务
print("Updated user name.")
# 再次查询以验证更新
cursor.execute(sql_select, ('alice@example.com',))
result = cursor.fetchone()
print("Updated user:", result)
# 删 - DELETE
sql_delete = "DELETE FROM `users` WHERE `email` = %s"
cursor.execute(sql_delete, ('alice@example.com',))
connection.commit() # 提交事务
print("Deleted user.")
finally:
connection.close() # 关闭数据库连接
在这个示例中,请将 'your_username'
, 'your_password'
, 'your_database'
替换为你的数据库实际用户名、密码和数据库名。同时,请确保你的数据库中有一个名为 users
的表,该表至少包含 name
和 email
两个字段。
这个脚本首先插入一条新用户记录,然后查询并打印该用户的信息。接着,它更新用户的名字并再次查询以验证更新。最后,它删除刚刚插入的用户记录。
请注意,每次执行修改数据的操作后,都需要调用 connection.commit()
来提交事务,以确保数据被永久保存到数据库中。如果省略了提交操作,那么当连接关闭时,所有未提交的更改都将丢失。
作者:顽石九变