example_usage.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. """
  2. MySQL工具库使用示例
  3. 本文件展示如何使用MySQL工具库进行各种数据库操作
  4. """
  5. from . import mysql_db, MySQLConnectionError, MySQLQueryError
  6. def basic_crud_examples():
  7. """基础CRUD操作示例"""
  8. print("=== 基础CRUD操作示例 ===")
  9. try:
  10. # 1. 插入数据
  11. user_id = mysql_db.insert('users', {
  12. 'name': 'John Doe',
  13. 'email': 'john@example.com',
  14. 'age': 25,
  15. 'created_at': '2023-01-01 10:00:00'
  16. })
  17. print(f"插入用户成功,ID: {user_id}")
  18. # 2. 查询单条数据
  19. user = mysql_db.select_one('users', where='id = %s', where_params=(user_id,))
  20. print(f"查询用户: {user}")
  21. # 3. 查询多条数据
  22. users = mysql_db.select('users', where='age > %s', where_params=(20,), limit=10)
  23. print(f"查询到 {len(users)} 个用户")
  24. # 4. 更新数据
  25. affected_rows = mysql_db.update('users', {'age': 26}, 'id = %s', (user_id,))
  26. print(f"更新了 {affected_rows} 条记录")
  27. # 5. 统计记录数
  28. count = mysql_db.count('users', where='age > %s', where_params=(20,))
  29. print(f"年龄大于20的用户数: {count}")
  30. # 6. 检查记录是否存在
  31. exists = mysql_db.exists('users', 'email = %s', ('john@example.com',))
  32. print(f"邮箱存在: {exists}")
  33. # 7. 删除数据(注意:这里只是示例,实际使用时要谨慎)
  34. # deleted_rows = mysql_db.delete('users', 'id = %s', (user_id,))
  35. # print(f"删除了 {deleted_rows} 条记录")
  36. except (MySQLConnectionError, MySQLQueryError) as e:
  37. print(f"数据库操作失败: {e}")
  38. def advanced_query_examples():
  39. """高级查询示例"""
  40. print("\n=== 高级查询示例 ===")
  41. try:
  42. # 1. 分页查询
  43. result = mysql_db.paginate('users', page=1, page_size=5, order_by='created_at DESC')
  44. print(f"分页查询结果:")
  45. print(f" 当前页: {result['pagination']['current_page']}")
  46. print(f" 总记录数: {result['pagination']['total_count']}")
  47. print(f" 总页数: {result['pagination']['total_pages']}")
  48. print(f" 数据条数: {len(result['data'])}")
  49. # 2. 排序查询
  50. users = mysql_db.select_with_sort('users', sort_field='age', sort_order='DESC', limit=5)
  51. print(f"按年龄降序查询到 {len(users)} 个用户")
  52. # 3. 多字段排序
  53. users = mysql_db.select_with_multiple_sort('users',
  54. sort_fields=[('age', 'DESC'), ('created_at', 'ASC')], limit=5)
  55. print(f"多字段排序查询到 {len(users)} 个用户")
  56. # 4. 聚合查询
  57. agg_result = mysql_db.aggregate('users', {
  58. 'total_count': 'COUNT(*)',
  59. 'avg_age': 'AVG(age)',
  60. 'max_age': 'MAX(age)',
  61. 'min_age': 'MIN(age)'
  62. })
  63. print(f"聚合查询结果: {agg_result[0]}")
  64. # 5. 分组统计
  65. age_groups = mysql_db.group_count('users', 'age', limit=5)
  66. print(f"年龄分组统计: {age_groups}")
  67. # 6. 模糊搜索
  68. search_results = mysql_db.search('users', ['name', 'email'], 'john', limit=10)
  69. print(f"搜索结果: {len(search_results)} 条记录")
  70. # 7. 单独聚合函数
  71. total_age = mysql_db.sum('users', 'age')
  72. avg_age = mysql_db.avg('users', 'age')
  73. max_age = mysql_db.max('users', 'age')
  74. min_age = mysql_db.min('users', 'age')
  75. print(f"年龄统计 - 总和: {total_age}, 平均: {avg_age}, 最大: {max_age}, 最小: {min_age}")
  76. except Exception as e:
  77. print(f"高级查询失败: {e}")
  78. def transaction_examples():
  79. """事务操作示例"""
  80. print("\n=== 事务操作示例 ===")
  81. try:
  82. # 1. 使用事务上下文管理器
  83. with mysql_db.transaction():
  84. # 在事务中执行多个操作
  85. user_id = mysql_db.insert('users', {
  86. 'name': 'Transaction User',
  87. 'email': 'trans@example.com',
  88. 'age': 30
  89. })
  90. # 更新相关数据
  91. mysql_db.update('users', {'age': 31}, 'id = %s', (user_id,))
  92. print("事务操作完成")
  93. # 2. 使用函数式事务
  94. def batch_operations(connection, user_data_list):
  95. results = []
  96. for user_data in user_data_list:
  97. result = mysql_db.insert('users', user_data, connection)
  98. results.append(result)
  99. return results
  100. user_data_list = [
  101. {'name': 'User1', 'email': 'user1@example.com', 'age': 25},
  102. {'name': 'User2', 'email': 'user2@example.com', 'age': 26},
  103. {'name': 'User3', 'email': 'user3@example.com', 'age': 27}
  104. ]
  105. result_ids = mysql_db.execute_in_transaction(batch_operations, user_data_list)
  106. print(f"批量插入结果: {result_ids}")
  107. # 3. 批量操作
  108. operations = [
  109. ('insert', ('users', {'name': 'Batch User 1', 'email': 'batch1@example.com', 'age': 28}), {}),
  110. ('insert', ('users', {'name': 'Batch User 2', 'email': 'batch2@example.com', 'age': 29}), {}),
  111. ]
  112. batch_results = mysql_db.batch_operations(operations)
  113. print(f"批量操作结果: {batch_results}")
  114. except Exception as e:
  115. print(f"事务操作失败: {e}")
  116. def error_handling_examples():
  117. """错误处理示例"""
  118. print("\n=== 错误处理示例 ===")
  119. # 1. 处理连接错误
  120. try:
  121. # 尝试查询不存在的表
  122. mysql_db.select('non_existent_table')
  123. except MySQLQueryError as e:
  124. print(f"查询错误: {e.message}")
  125. print(f"原始错误: {e.original_error}")
  126. # 2. 处理数据验证错误
  127. try:
  128. # 尝试插入空数据
  129. mysql_db.insert('users', {})
  130. except ValueError as e:
  131. print(f"数据验证错误: {e}")
  132. def batch_operations_examples():
  133. """批量操作示例"""
  134. print("\n=== 批量操作示例 ===")
  135. try:
  136. # 批量插入
  137. users_data = [
  138. {'name': 'Batch User A', 'email': 'a@example.com', 'age': 20},
  139. {'name': 'Batch User B', 'email': 'b@example.com', 'age': 21},
  140. {'name': 'Batch User C', 'email': 'c@example.com', 'age': 22},
  141. ]
  142. affected_rows = mysql_db.insert_many('users', users_data)
  143. print(f"批量插入了 {affected_rows} 条记录")
  144. # 批量执行自定义SQL
  145. sql = "UPDATE users SET age = age + 1 WHERE name LIKE %s"
  146. params_list = [('Batch User%',), ('Transaction%',)]
  147. total_affected = mysql_db.execute_many(sql, params_list)
  148. print(f"批量更新影响了 {total_affected} 条记录")
  149. except Exception as e:
  150. print(f"批量操作失败: {e}")
  151. def connection_pool_examples():
  152. """连接池示例"""
  153. print("\n=== 连接池状态 ===")
  154. # 获取连接池状态
  155. status = mysql_db.pool.get_pool_status()
  156. print(f"连接池状态: {status}")
  157. def main():
  158. """运行所有示例"""
  159. print("MySQL工具库使用示例")
  160. print("=" * 50)
  161. try:
  162. basic_crud_examples()
  163. advanced_query_examples()
  164. transaction_examples()
  165. batch_operations_examples()
  166. connection_pool_examples()
  167. error_handling_examples()
  168. print("\n" + "=" * 50)
  169. print("示例运行完成!")
  170. except Exception as e:
  171. print(f"示例运行出错: {e}")
  172. if __name__ == '__main__':
  173. main()