跳转至

Python3 MySQL(mysql-connector)

概念与用途

mysql-connector-python 是 MySQL 官方 Python 驱动,遵循 DB-API 风格,可执行查询、事务和预处理参数。本教程建议 python -m pip install "mysql-connector-python>=8.2",运行示例需要可访问的 MySQL 8.x、数据库和最小权限账户。

核心 API

使用 mysql.connector.connect() 建立连接,cursor.execute(sql, params) 参数化执行,commit() 提交写操作。连接信息应来自环境变量或密钥系统。

import os
import mysql.connector

with mysql.connector.connect(
    host=os.environ.get("MYSQL_HOST", "127.0.0.1"),
    user=os.environ["MYSQL_USER"],
    password=os.environ["MYSQL_PASSWORD"],
    database=os.environ["MYSQL_DATABASE"],
) as connection:
    with connection.cursor() as cursor:
        cursor.execute("SELECT %s + %s", (2, 3))
        print(cursor.fetchone()[0])

关键配置

配置/API 作用 工程要求
connection_timeout 建立连接上限 必须有限值
autocommit 自动提交 写业务通常显式事务
cursor() 创建游标 用上下文关闭
rollback() 撤销当前事务 异常路径调用

示例:事务异常模板

def transfer(connection, cursor, source: int, target: int, amount: int) -> None:
    try:
        cursor.execute("UPDATE account SET balance=balance-%s WHERE id=%s", (amount, source))
        cursor.execute("UPDATE account SET balance=balance+%s WHERE id=%s", (amount, target))
        connection.commit()
    except Exception:
        connection.rollback()
        raise

模板需在真实连接中调用,且应检查更新行数、余额约束和隔离级别。连接池归还前必须结束事务;查询与锁等待超时还需在服务端或会话层配置。

常见错误与安全注意

  • 占位符是 %s,不能用 f-string 拼接 SQL;表名等标识符需白名单处理。
  • 写操作必须明确提交或回滚,并缩短事务持锁时间。
  • 生产环境使用最小权限账户、TLS、连接池和查询超时。