本模块提供了一个功能完善的MySQL数据库连接工具,包括基本的数据库连接类和高性能的连接池实现,支持灵活的配置管理、异常处理和日志记录。
- 基本的数据库连接功能,支持连接、查询、更新等操作
- 灵活的配置参数处理,支持直接参数、配置字典、配置文件和环境变量
- 高性能连接池实现,自动管理连接资源
- 完善的异常处理,定义了多种专用异常类
- 详细的日志记录,便于调试和监控
- 支持线程安全的并发操作
本模块依赖于pymysql库,使用前请先安装:
pip install pymysql使用MySQLConnection类进行基本的数据库连接:
from mysql import MySQLConnection
# 创建数据库连接
conn = MySQLConnection(
host='localhost',
user='root',
password='your_password',
database='your_database',
port=3306
)
# 连接数据库
conn.connect()
# 执行查询
result = conn.execute_query("SELECT * FROM users LIMIT 10")
print(f"查询结果: {result}")
# 执行更新
affected_rows = conn.execute_update(
"INSERT INTO users (name, email) VALUES (%s, %s)",
('张三', 'zhangsan@example.com')
)
print(f"插入成功,影响行数: {affected_rows}")
# 关闭连接
conn.close()from mysql import MySQLConnection
# 定义配置字典
config = {
'host': 'localhost',
'user': 'root',
'password': 'your_password',
'database': 'your_database'
}
# 使用配置字典创建连接
conn = MySQLConnection(config=config)
conn.connect()
# 执行操作...
conn.close()创建配置文件db_config.json:
{
"host": "localhost",
"user": "root",
"password": "your_password",
"database": "your_database",
"port": 3306,
"charset": "utf8mb4"
}然后从配置文件加载:
from mysql import MySQLConnection
# 从配置文件创建连接
conn = MySQLConnection.from_config_file('db_config.json')
conn.connect()
# 执行操作...
conn.close()设置环境变量:
# Linux/Mac
export MYSQL_HOST=localhost
export MYSQL_USER=root
export MYSQL_PASSWORD=your_password
export MYSQL_DATABASE=your_database
# Windows (命令提示符)
set MYSQL_HOST=localhost
set MYSQL_USER=root
set MYSQL_PASSWORD=your_password
set MYSQL_DATABASE=your_database
# Windows (PowerShell)
$env:MYSQL_HOST = "localhost"
$env:MYSQL_USER = "root"
$env:MYSQL_PASSWORD = "your_password"
$env:MYSQL_DATABASE = "your_database"然后使用环境变量:
from mysql import MySQLConnection
# 从环境变量创建连接
conn = MySQLConnection.from_env()
conn.connect()
# 执行操作...
conn.close()对于高并发场景,推荐使用连接池:
from mysql import MySQLConnectionPool
# 创建连接池
pool = MySQLConnectionPool(
min_connections=5, # 最小连接数
max_connections=20, # 最大连接数
host='localhost',
user='root',
password='your_password',
database='your_database'
)
# 执行查询
result = pool.execute_query("SELECT * FROM users LIMIT 10")
print(f"查询结果: {result}")
# 执行更新
affected_rows = pool.execute_update(
"INSERT INTO users (name, email) VALUES (%s, %s)",
('李四', 'lisi@example.com')
)
print(f"插入成功,影响行数: {affected_rows}")
# 手动获取和释放连接(高级用法)
conn = pool.get_connection()
try:
with conn.cursor() as cursor:
cursor.execute("SELECT COUNT(*) as count FROM users")
result = cursor.fetchone()
print(f"用户总数: {result['count']}")
finally:
pool.release_connection(conn)
# 程序结束时关闭所有连接
pool.close_all_connections()连接池也支持从配置文件和环境变量加载配置:
from mysql import MySQLConnectionPool
# 从配置文件创建连接池
pool_from_config = MySQLConnectionPool.from_config_file('db_config.json')
# 从环境变量创建连接池
pool_from_env = MySQLConnectionPool.from_env()连接池提供了上下文管理器支持,简化连接的获取和释放:
from mysql import MySQLConnectionPool
pool = MySQLConnectionPool.from_env()
# 使用上下文管理器
with pool.connection() as conn:
with conn.cursor() as cursor:
cursor.execute("SELECT * FROM users LIMIT 5")
result = cursor.fetchall()
print(result)
# 连接会自动释放回连接池使用自定义异常类进行精确的异常处理:
from mysql import MySQLConnectionPool, ConnectionError, QueryError, UpdateError, PoolExhaustedError
pool = MySQLConnectionPool.from_env()
try:
# 执行操作
result = pool.execute_query("SELECT * FROM nonexistent_table")
except ConnectionError as e:
print(f"连接错误: {e}")
except QueryError as e:
print(f"查询错误: {e}")
except PoolExhaustedError as e:
print(f"连接池资源耗尽: {e}")
except Exception as e:
print(f"其他错误: {e}")模块定义了以下自定义异常类:
DatabaseError:所有数据库异常的基类ConnectionError:连接相关的异常QueryError:查询执行异常UpdateError:更新操作异常PoolExhaustedError:连接池资源耗尽异常
模块内置了日志系统,默认记录INFO级别以上的日志。您可以在初始化时调整日志级别:
import logging
from mysql import MySQLConnection, MySQLConnectionPool
# 设置详细日志
conn = MySQLConnection(
host='localhost',
user='root',
password='your_password',
database='your_database',
log_level=logging.DEBUG # 详细日志
)
# 连接池也支持日志级别设置
pool = MySQLConnectionPool(
min_connections=5,
max_connections=20,
host='localhost',
user='root',
password='your_password',
database='your_database',
log_level=logging.INFO # 默认级别
)-
高并发场景使用连接池:对于Web应用等并发场景,优先使用
MySQLConnectionPool以提高性能 -
配置外部化:将数据库配置存储在配置文件或环境变量中,避免硬编码
-
异常处理:始终使用try-except捕获并处理可能的异常
-
资源释放:确保在使用完毕后关闭连接或释放回连接池
-
参数化查询:使用参数化查询避免SQL注入攻击
- 确保
pymysql库已正确安装 - 数据库配置信息(特别是密码)应妥善保管,避免泄露
- 对于长时间运行的应用,应定期检查连接状态,必要时重新连接
- 在高负载系统中,连接池的参数(最小/最大连接数)可能需要根据实际情况调整
- 初始版本:1.0.0
- 支持Python 3.6及以上版本
- 依赖:pymysql