|
|
6 tuntia sitten | |
|---|---|---|
| .. | ||
| README.md | 6 tuntia sitten | |
| __init__.py | 6 tuntia sitten | |
| db_config.py | 6 tuntia sitten | |
| example_usage.py | 6 tuntia sitten | |
| mysql_advanced.py | 6 tuntia sitten | |
| mysql_exceptions.py | 6 tuntia sitten | |
| mysql_helper.py | 6 tuntia sitten | |
| mysql_pool.py | 6 tuntia sitten | |
| mysql_transaction.py | 6 tuntia sitten | |
| test_mysql_utils.py | 6 tuntia sitten | |
基于pymysql的MySQL数据库操作工具库,提供连接池管理、CRUD操作、高级查询、事务管理等功能。
pip install pymysql
在项目根目录的.env文件中配置数据库连接信息:
DB_INFO={
"host": "your_host",
"database": "your_database",
"port": 3306,
"user": "your_username",
"passwd": "your_password",
"charset": "utf8"
}
from utils.mysql import mysql_db
# 插入数据
user_id = mysql_db.insert('users', {
'name': 'John Doe',
'email': 'john@example.com',
'age': 25
})
# 查询数据
users = mysql_db.select('users', where='age > %s', where_params=(20,))
# 更新数据
mysql_db.update('users', {'age': 26}, 'id = %s', (user_id,))
# 删除数据
mysql_db.delete('users', 'id = %s', (user_id,))
# 分页查询
result = mysql_db.paginate('users', page=1, page_size=10, order_by='created_at DESC')
print(f"总记录数: {result['pagination']['total_count']}")
print(f"当前页数据: {result['data']}")
# 聚合查询
stats = mysql_db.aggregate('users', {
'total_count': 'COUNT(*)',
'avg_age': 'AVG(age)',
'max_age': 'MAX(age)'
})
# 模糊搜索
results = mysql_db.search('users', ['name', 'email'], 'john')
# 排序查询
users = mysql_db.select_with_sort('users', sort_field='age', sort_order='DESC')
# 使用事务上下文管理器
with mysql_db.transaction():
user_id = mysql_db.insert('users', {'name': 'John', 'age': 25})
mysql_db.update('users', {'age': 26}, 'id = %s', (user_id,))
# 如果发生异常,事务会自动回滚
# 批量插入
users_data = [
{'name': 'User1', 'email': 'user1@example.com', 'age': 25},
{'name': 'User2', 'email': 'user2@example.com', 'age': 26}
]
mysql_db.insert_many('users', users_data)
插入数据
table: 表名data: 数据字典connection: 数据库连接(可选,用于事务)查询数据
table: 表名columns: 查询列,默认为*where: WHERE条件where_params: WHERE条件参数order_by: 排序条件limit: 限制数量connection: 数据库连接(可选,用于事务)更新数据
table: 表名data: 更新数据字典where: WHERE条件where_params: WHERE条件参数connection: 数据库连接(可选,用于事务)删除数据
table: 表名where: WHERE条件where_params: WHERE条件参数connection: 数据库连接(可选,用于事务)分页查询
data和pagination信息的字典聚合查询
agg_functions: 聚合函数字典,格式为 {'alias': 'function(column)'}模糊搜索
search_columns: 搜索的列名列表keyword: 搜索关键字事务上下文管理器
isolation_level: 事务隔离级别with mysql_db.transaction():
# 在事务中执行操作
pass
在事务中执行函数
func: 要执行的函数,第一个参数必须是connection获取连接池状态
工具库提供了以下自定义异常类型:
MySQLBaseException: 基础异常类MySQLConnectionError: 连接异常MySQLConfigError: 配置异常MySQLQueryError: 查询异常MySQLTransactionError: 事务异常MySQLPoolError: 连接池异常MySQLValidationError: 数据验证异常from utils.mysql import mysql_db, MySQLConnectionError, MySQLQueryError
try:
users = mysql_db.select('users')
except MySQLConnectionError as e:
print(f"数据库连接失败: {e}")
except MySQLQueryError as e:
print(f"查询失败: {e}")
本模块使用 loguru 进行日志记录。你可以在项目中自定义 loguru 配置:
from loguru import logger
# 配置日志输出到文件
logger.add("logs/mysql.log", rotation="10 MB", retention="7 days", level="INFO")
# 配置 SQL 调试日志
logger.add("logs/mysql_sql.log", rotation="10 MB", retention="7 days", level="DEBUG", filter=lambda record: "SQL" in record["message"])
utils/
├── __init__.py # 主入口文件
├── db_config.py # 数据库配置解析(使用 python-dotenv)
├── mysql_pool.py # 连接池管理
├── mysql_helper.py # 基础CRUD操作
├── mysql_advanced.py # 高级查询功能
├── mysql_transaction.py # 事务管理
├── mysql_exceptions.py # 自定义异常
├── example_usage.py # 使用示例
├── test_mysql_utils.py # 测试用例
└── README.md # 文档说明
# 运行所有测试
python utils/test_mysql_utils.py
# 查看使用示例
python utils/example_usage.py
.env文件中的数据库连接信息当前版本:1.0.0
MIT License