mysql_db.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. # -*- coding: utf-8 -*-
  2. """
  3. 数据库连接及操作
  4. """
  5. import pymysql
  6. from loguru import logger
  7. class MysqlHelper:
  8. @classmethod
  9. def connect_mysql(cls):
  10. # 创建一个 Connection 对象,代表了一个数据库连接
  11. connection = pymysql.connect(
  12. host="rm-bp13g3ra2f59q49xs.mysql.rds.aliyuncs.com", # 数据库IP地址,内网地址
  13. port=3306, # 端口号
  14. user="wqsd", # mysql用户名
  15. passwd="wqsd@2025", # mysql用户登录密码
  16. db="ai_knowledge", # 数据库名
  17. # 如果数据库里面的文本是utf8编码的,charset指定是utf8
  18. charset="utf8",
  19. # 超时设置
  20. connect_timeout=30, # 连接超时时间(秒)
  21. read_timeout=30, # 读取超时时间(秒)
  22. write_timeout=30 # 写入超时时间(秒)
  23. )
  24. return connection
  25. @classmethod
  26. def get_values(cls, sql, params=None):
  27. try:
  28. # 连接数据库
  29. connect = cls.connect_mysql()
  30. # 返回一个 Cursor对象
  31. mysql = connect.cursor()
  32. if params:
  33. # 如果传递了 params 参数
  34. mysql.execute(sql, params)
  35. else:
  36. # 如果没有传递 params 参数
  37. mysql.execute(sql)
  38. # fetchall方法返回的是一个元组,里面每个元素也是元组,代表一行记录
  39. data = mysql.fetchall()
  40. # 关闭数据库连接
  41. connect.close()
  42. # 返回查询结果,元组
  43. return data
  44. except Exception as e:
  45. print(f"get_values异常:{e}\n")
  46. @classmethod
  47. def update_values(cls, sql, params=None):
  48. """
  49. 执行更新操作(INSERT/UPDATE/DELETE)
  50. 参数:
  51. sql: 要执行的SQL语句
  52. params: SQL参数(可选,元组或字典)
  53. 返回:
  54. 成功时返回影响的行数,失败返回None
  55. """
  56. connect = None
  57. cursor = None
  58. try:
  59. connect = cls.connect_mysql()
  60. cursor = connect.cursor()
  61. # 执行SQL语句
  62. if params:
  63. affected_rows = cursor.execute(sql, params)
  64. else:
  65. affected_rows = cursor.execute(sql)
  66. connect.commit()
  67. return affected_rows
  68. except Exception as e:
  69. logger.error(f"SQL执行失败: {e}")
  70. logger.error(f"SQL语句: {sql}")
  71. if params:
  72. logger.error(f"参数: {params}")
  73. if connect:
  74. connect.rollback()
  75. return None
  76. finally:
  77. # 确保资源关闭
  78. if cursor:
  79. cursor.close()
  80. if connect:
  81. connect.close()