db.py 5.5 KB

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