PyMySQL快速入门:从安装到实战 – wiki大全


PyMySQL 快速入门:从安装到实战

在 Python 中与 MySQL 数据库进行交互是后端开发中的常见需求。PyMySQL 是一个纯 Python 实现的 MySQL 客户端库,它遵循 DB-API v2 规范,并且因为它不依赖于任何 C 库,所以安装和部署都非常方便。

本文将带你从零开始,快速掌握 PyMySQL 的使用方法。

1. 环境准备

在开始之前,请确保你已经准备好以下环境:

  • Python 3.x:确保你的系统中已经安装了 Python。
  • MySQL 或 MariaDB 数据库:你需要有一个正在运行的数据库实例,并拥有一个可以访问它的账户。

2. 安装 PyMySQL

使用 pip 是安装 PyMySQL 最简单的方式。打开你的终端或命令行工具,输入以下命令:

bash
pip install PyMySQL

等待安装完成即可。

3. PyMySQL 核心概念

PyMySQL 的使用流程非常直观,主要围绕以下两个核心对象:

  • Connection (连接对象):代表了与数据库的一次会话。所有的数据库操作都始于建立一个连接。
  • Cursor (游标对象):用于执行 SQL 语句并获取结果。一个连接可以创建多个游标。

基本操作流程如下:
1. 导入 pymysql 模块。
2. 调用 pymysql.connect() 建立与数据库的连接。
3. 通过连接对象创建游标 connection.cursor()
4. 使用游标的 execute() 方法执行 SQL 语句。
5. 如果是查询操作,使用 fetchone(), fetchall()fetchmany() 获取结果。
6. 如果是增、删、改操作,调用 connection.commit() 提交事务。
7. 操作完成后,关闭游标和连接。

4. 快速上手:基本操作

4.1. 建立连接

首先,我们需要连接到数据库。你需要提供主机(host)、用户名(user)、密码(password)和数据库名(database)。

“`python
import pymysql

建立数据库连接

请根据你的实际情况修改以下参数

connection = pymysql.connect(
host=’localhost’, # 数据库主机地址,本地一般为 ‘localhost’ 或 ‘127.0.0.1’
user=’your_username’, # 数据库用户名
password=’your_password’,# 数据库密码
database=’your_database’,# 要操作的数据库名
charset=’utf8mb4′ # 建议使用 utf8mb4 以支持 emoji 等特殊字符
)

print(“数据库连接成功!”)

操作完成后记得关闭连接

connection.close()
“`

4.2. 执行查询 (SELECT)

游标是执行 SQL 的关键。为了更方便地处理结果,我们可以在创建连接时指定 cursorclass=pymysql.cursors.DictCursor,这样查询结果将以字典形式返回,更易读。

使用 with 语句是最佳实践,因为它可以自动管理资源的关闭(无论是游标还是连接)。

“`python
import pymysql
import pymysql.cursors

建立连接,并指定游标类型为 DictCursor

connection = pymysql.connect(
host=’localhost’,
user=’your_username’,
password=’your_password’,
database=’your_database’,
charset=’utf8mb4′,
cursorclass=pymysql.cursors.DictCursor # 关键:返回字典形式的结果
)

try:
# 使用 with 语句可以自动关闭游标
with connection.cursor() as cursor:
# 准备 SQL 语句
sql = “SELECT id, name, email FROM users WHERE id = %s”

    # 执行 SQL 语句,并将参数安全地传递给 execute 方法
    # 注意:为了防止 SQL 注入,请务必使用这种参数化查询的方式
    cursor.execute(sql, (1,))

    # 获取单条查询结果
    result = cursor.fetchone()

    if result:
        print("查询结果:")
        print(result) # 输出: {'id': 1, 'name': 'Alice', 'email': '[email protected]'}
    else:
        print("未找到用户。")

finally:
# 确保连接最终被关闭
connection.close()
“`

安全提示:永远不要手动拼接字符串来构建 SQL 查询,例如 f"SELECT ... WHERE id = {user_id}"。这极易受到 SQL 注入攻击。始终使用 cursor.execute(sql, params) 的参数化形式。

4.3. 插入数据 (INSERT)

插入、更新和删除操作都需要在执行后提交事务,否则更改不会被保存到数据库中。

“`python

… (连接代码同上) …

try:
with connection.cursor() as cursor:
sql = “INSERT INTO users (name, email) VALUES (%s, %s)”
# 执行插入操作
cursor.execute(sql, (‘Bob’, ‘[email protected]’))

# 提交事务以保存更改
connection.commit()
print("数据插入成功!")

finally:
connection.close()
“`

4.4. 更新和删除 (UPDATE & DELETE)

更新和删除操作与插入类似,执行后也需要提交事务。

“`python

… (连接代码同上) …

try:
with connection.cursor() as cursor:
# 更新数据
sql_update = “UPDATE users SET email = %s WHERE name = %s”
cursor.execute(sql_update, (‘[email protected]’, ‘Charlie’))

    # 删除数据
    sql_delete = "DELETE FROM `users` WHERE `name` = %s"
    cursor.execute(sql_delete, ('David',))

# 提交事务
connection.commit()
print("数据更新和删除操作已提交。")

except pymysql.MySQLError as e:
print(f”数据库操作失败: {e}”)
# 如果发生错误,回滚事务
connection.rollback()

finally:
connection.close()
“`

5. 实战项目:一个完整的示例

下面是一个完整的脚本,演示了如何创建一个表,并对其进行增删改查(CRUD)操作。

“`python
import pymysql
import pymysql.cursors

— 数据库配置 —

DB_CONFIG = {
‘host’: ‘localhost’,
‘user’: ‘your_username’,
‘password’: ‘your_password’,
‘database’: ‘your_database’,
‘charset’: ‘utf8mb4’,
‘cursorclass’: pymysql.cursors.DictCursor
}

def main():
“””主函数,演示完整的 CRUD 流程”””
connection = pymysql.connect(**DB_CONFIG)
print(“数据库连接成功…”)

try:
    with connection.cursor() as cursor:
        # 1. 创建一个测试表 (如果不存在)
        print("\n1. 准备创建 'employees' 表...")
        cursor.execute("DROP TABLE IF EXISTS `employees`")
        create_table_sql = """
        CREATE TABLE `employees` (
            `id` INT AUTO_INCREMENT PRIMARY KEY,
            `name` VARCHAR(100) NOT NULL,
            `email` VARCHAR(100) UNIQUE,
            `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
        )
        """
        cursor.execute(create_table_sql)
        print("'employees' 表创建成功!")

        # 2. 插入多条数据
        print("\n2. 插入员工数据...")
        employees_to_add = [
            ('Alice', '[email protected]'),
            ('Bob', '[email protected]'),
            ('Charlie', '[email protected]')
        ]
        insert_sql = "INSERT INTO `employees` (`name`, `email`) VALUES (%s, %s)"
        # executemany 可以高效地插入多行数据
        cursor.executemany(insert_sql, employees_to_add)
        connection.commit() # 提交插入操作
        print(f"成功插入 {cursor.rowcount} 条数据。")

        # 3. 查询所有数据
        print("\n3. 查询所有员工信息...")
        cursor.execute("SELECT * FROM `employees`")
        all_employees = cursor.fetchall()
        for emp in all_employees:
            print(emp)

        # 4. 更新一条数据
        print("\n4. 更新 Bob 的邮箱...")
        update_sql = "UPDATE `employees` SET `email` = %s WHERE `name` = %s"
        cursor.execute(update_sql, ('[email protected]', 'Bob'))
        connection.commit() # 提交更新操作
        print("数据更新成功!")

        # 5. 查询确认更新
        print("\n5. 再次查询 Bob 的信息以确认更新...")
        cursor.execute("SELECT * FROM `employees` WHERE `name` = %s", ('Bob',))
        bob_info = cursor.fetchone()
        print(bob_info)

        # 6. 删除一条数据
        print("\n6. 删除 Charlie 的记录...")
        delete_sql = "DELETE FROM `employees` WHERE `name` = %s"
        cursor.execute(delete_sql, ('Charlie',))
        connection.commit() # 提交删除操作
        print("数据删除成功!")

        # 7. 最终查询
        print("\n7. 查询剩余员工信息...")
        cursor.execute("SELECT `name`, `email` FROM `employees`")
        remaining_employees = cursor.fetchall()
        for emp in remaining_employees:
            print(emp)

except pymysql.MySQLError as e:
    print(f"发生数据库错误: {e}")
    connection.rollback() # 出错时回滚
finally:
    connection.close()
    print("\n数据库连接已关闭。")

if name == ‘main‘:
main()
“`

总结

PyMySQL 是一个功能强大且易于使用的 Python 库。通过本文,你应该已经掌握了它的核心用法:

  • 使用 pip 安装。
  • 通过 pymysql.connect() 建立连接,最好指定 DictCursor
  • 使用 with connection.cursor() 结构来安全地执行 SQL。
  • 使用参数化查询 execute(sql, params) 来防止 SQL 注入。
  • 对于增、删、改操作,记得调用 connection.commit() 提交事务。
  • try...except...finally 结构中处理异常并确保连接关闭。

有了这些基础,你就可以在你的 Python 项目中自如地与 MySQL 数据库进行交互了。

滚动至顶部