mysql_help.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. # -*- coding: utf-8 -*-
  2. # @Author: wangkun
  3. # @Time: 2023/2/2
  4. """
  5. 数据库连接及操作
  6. """
  7. import os
  8. import logging
  9. import pymysql
  10. from dotenv import load_dotenv
  11. load_dotenv(verbose=True)
  12. env = os.getenv('env')
  13. class MysqlHelper:
  14. @classmethod
  15. def connect_mysql(cls):
  16. if env == 'hk':
  17. # 创建一个 Connection 对象,代表了一个数据库连接
  18. connection = pymysql.connect(
  19. host="rm-j6cz4c6pt96000xi3.mysql.rds.aliyuncs.com", # 数据库IP地址,内网地址
  20. # host="rm-j6cz4c6pt96000xi3lo.mysql.rds.aliyuncs.com",# 数据库IP地址,外网地址
  21. port=3306, # 端口号
  22. user="crawler", # mysql用户名
  23. passwd="crawler123456@", # mysql用户登录密码
  24. db="piaoquan-crawler", # 数据库名
  25. # 如果数据库里面的文本是utf8编码的,charset指定是utf8
  26. charset="utf8")
  27. elif env == 'prod':
  28. # 创建一个 Connection 对象,代表了一个数据库连接
  29. connection = pymysql.connect(
  30. host="rm-bp1159bu17li9hi94.mysql.rds.aliyuncs.com", # 数据库IP地址,内网地址
  31. # host="rm-bp1159bu17li9hi94ro.mysql.rds.aliyuncs.com",# 数据库IP地址,外网地址
  32. port=3306, # 端口号
  33. user="crawler", # mysql用户名
  34. passwd="crawler123456@", # mysql用户登录密码
  35. db="piaoquan-crawler", # 数据库名
  36. # 如果数据库里面的文本是utf8编码的,charset指定是utf8
  37. charset="utf8")
  38. else:
  39. # 创建一个 Connection 对象,代表了一个数据库连接
  40. connection = pymysql.connect(
  41. host="rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com", # 数据库IP地址,内网地址
  42. # host="rm-bp1k5853td1r25g3ndo.mysql.rds.aliyuncs.com", # 数据库IP地址,外网地址
  43. port=3306, # 端口号
  44. user="crawler", # mysql用户名
  45. passwd="crawler123456@", # mysql用户登录密码
  46. db="piaoquan-crawler", # 数据库名
  47. # 如果数据库里面的文本是utf8编码的,charset指定是utf8
  48. charset="utf8")
  49. return connection
  50. @classmethod
  51. def get_values(cls, sql):
  52. try:
  53. # 连接数据库
  54. connect = cls.connect_mysql()
  55. # 返回一个 Cursor对象
  56. mysql = connect.cursor(cursor=pymysql.cursors.DictCursor)
  57. # 执行 sql 语句
  58. mysql.execute(sql)
  59. # fetchall方法返回的是一个元组,里面每个元素也是元组,代表一行记录
  60. data = mysql.fetchall()
  61. # 关闭数据库连接
  62. connect.close()
  63. # 返回查询结果,元组
  64. return data
  65. except Exception as e:
  66. logging.error(f"get_values异常:{e}\n")
  67. @classmethod
  68. def insert_values(cls, sql, value):
  69. try:
  70. # 连接数据库
  71. connect = cls.connect_mysql()
  72. # 返回一个 Cursor对象
  73. mysql = connect.cursor()
  74. # 执行 sql 语句
  75. mysql.execute(sql, value)
  76. task_id = connect.insert_id()
  77. connect.commit()
  78. # 关闭数据库连接
  79. connect.close()
  80. # 返回查询结果,元组
  81. return task_id
  82. except Exception as e:
  83. logging.error(f"insert_values异常:{e}\n")
  84. @classmethod
  85. def update_values(cls, sql):
  86. # 连接数据库
  87. connect = cls.connect_mysql()
  88. # 返回一个 Cursor对象
  89. mysql = connect.cursor()
  90. try:
  91. # 执行 sql 语句
  92. res = mysql.execute(sql)
  93. # 注意 一定要commit,否则添加数据不生效
  94. connect.commit()
  95. connect.close()
  96. return True
  97. except Exception as e:
  98. logging.error(f"update_values异常,进行回滚操作:{e}\n")
  99. # 发生错误时回滚
  100. connect.rollback()
  101. connect.close()
  102. return False
  103. # 关闭数据库连接
  104. if __name__ == "__main__":
  105. # sql_statement = f"INSERT INTO crawler_user ( user_id, out_user_id, out_user_name, out_avatar_url, platform, tag) " \
  106. # f"VALUES ('6282398', 'out_uid_003', 'out_user_name', '', 'xiaoniangao', 'xiaoniangao_play')"
  107. # edit_data = MysqlHelper.edit_data(sql=sql_statement)
  108. # print(edit_data)
  109. get_data = MysqlHelper.get_values("select * from crawler_user")
  110. print(get_data)