scheduling_db.py 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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. # from common import Common
  11. class MysqlHelper:
  12. @classmethod
  13. def connect_mysql(cls, env, action):
  14. if env == 'hk':
  15. if action == 'get_author_map':
  16. # 创建一个 Connection 对象,代表了一个数据库连接
  17. connection = pymysql.connect(
  18. host="rm-bp1159bu17li9hi94ro.mysql.rds.aliyuncs.com", # 数据库IP地址,内网地址
  19. port=3306, # 端口号
  20. user="crawler", # mysql用户名
  21. passwd="crawler123456@", # mysql用户登录密码
  22. db="piaoquan-crawler", # 数据库名
  23. # 如果数据库里面的文本是utf8编码的,charset指定是utf8
  24. charset="utf8mb4")
  25. else:
  26. # 创建一个 Connection 对象,代表了一个数据库连接
  27. connection = pymysql.connect(
  28. host="rm-j6cz4c6pt96000xi3.mysql.rds.aliyuncs.com", # 数据库IP地址,内网地址
  29. # host="rm-j6cz4c6pt96000xi3lo.mysql.rds.aliyuncs.com",# 数据库IP地址,外网地址
  30. port=3306, # 端口号
  31. user="crawler", # mysql用户名
  32. passwd="crawler123456@", # mysql用户登录密码
  33. db="piaoquan-crawler", # 数据库名
  34. # 如果数据库里面的文本是utf8编码的,charset指定是utf8
  35. charset="utf8mb4")
  36. elif env == 'prod':
  37. # 创建一个 Connection 对象,代表了一个数据库连接
  38. connection = pymysql.connect(
  39. host="rm-bp1159bu17li9hi94.mysql.rds.aliyuncs.com", # 数据库IP地址,内网地址
  40. # host="rm-bp1159bu17li9hi94ro.mysql.rds.aliyuncs.com",# 数据库IP地址,外网地址
  41. port=3306, # 端口号
  42. user="crawler", # mysql用户名
  43. passwd="crawler123456@", # mysql用户登录密码
  44. db="piaoquan-crawler", # 数据库名
  45. # 如果数据库里面的文本是utf8编码的,charset指定是utf8
  46. charset="utf8mb4")
  47. else:
  48. # 创建一个 Connection 对象,代表了一个数据库连接
  49. connection = pymysql.connect(
  50. host="rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com", # 数据库IP地址,内网地址
  51. # host="rm-bp1k5853td1r25g3ndo.mysql.rds.aliyuncs.com", # 数据库IP地址,外网地址
  52. port=3306, # 端口号
  53. user="crawler", # mysql用户名
  54. passwd="crawler123456@", # mysql用户登录密码
  55. db="piaoquan-crawler", # 数据库名
  56. # 如果数据库里面的文本是utf8编码的,charset指定是utf8
  57. charset="utf8mb4")
  58. return connection
  59. @classmethod
  60. def get_values(cls, log_type, crawler, sql, env, action=''):
  61. try:
  62. # 连接数据库
  63. connect = cls.connect_mysql(env, action)
  64. # 返回一个 Cursor对象
  65. mysql = connect.cursor(cursor=pymysql.cursors.DictCursor)
  66. # 执行 sql 语句
  67. mysql.execute(sql)
  68. # fetchall方法返回的是一个元组,里面每个元素也是元组,代表一行记录
  69. data = mysql.fetchall()
  70. # 关闭数据库连接
  71. connect.close()
  72. # 返回查询结果,元组
  73. return data
  74. except Exception as e:
  75. Common.logger(log_type, crawler).error(f"get_values异常:{e}\n")
  76. @classmethod
  77. def update_values(cls, log_type, crawler, sql, env, action=''):
  78. # 连接数据库
  79. connect = cls.connect_mysql(env, action)
  80. # 返回一个 Cursor对象
  81. mysql = connect.cursor()
  82. try:
  83. # 执行 sql 语句
  84. res = mysql.execute(sql)
  85. # 注意 一定要commit,否则添加数据不生效
  86. connect.commit()
  87. return res
  88. except Exception as e:
  89. Common.logger(log_type, crawler).error(f"update_values异常,进行回滚操作:{e}\n")
  90. # 发生错误时回滚
  91. connect.rollback()
  92. # 关闭数据库连接
  93. connect.close()
  94. class RedisHelper:
  95. @classmethod
  96. def connect_redis(cls, env):
  97. if env == 'hk':
  98. redis_pool = redis.ConnectionPool(
  99. # host='r-bp154bpw97gptefiqk.redis.rds.aliyuncs.com', # 内网地址
  100. # host='r-bp154bpw97gptefiqkpd.redis.rds.aliyuncs.com', # 测试地址
  101. host='r-bp1mb0v08fqi4hjffupd.redis.rds.aliyuncs.com', # 外网地址
  102. port=6379,
  103. db=2,
  104. password='Wqsd@2019'
  105. )
  106. redis_conn = redis.Redis(connection_pool=redis_pool)
  107. elif env == 'prod':
  108. redis_pool = redis.ConnectionPool(
  109. host='r-bp1mb0v08fqi4hjffu.redis.rds.aliyuncs.com', # 内网地址
  110. # host='r-bp1mb0v08fqi4hjffupd.redis.rds.aliyuncs.com', # 外网地址
  111. port=6379,
  112. db=2,
  113. password='Wqsd@2019'
  114. )
  115. redis_conn = redis.Redis(connection_pool=redis_pool)
  116. else:
  117. redis_pool = redis.ConnectionPool(
  118. # host='r-bp154bpw97gptefiqk.redis.rds.aliyuncs.com', # 内网地址
  119. host='r-bp154bpw97gptefiqkpd.redis.rds.aliyuncs.com', # 外网地址
  120. port=6379,
  121. db=2,
  122. password='Qingqu2019'
  123. )
  124. redis_conn = redis.Redis(connection_pool=redis_pool)
  125. return redis_conn
  126. @classmethod
  127. def redis_push(cls, env, task_key, data):
  128. redis_conn = cls.connect_redis(env)
  129. # print("开始写入数据")
  130. redis_conn.lpush(task_key, data)
  131. # print("数据写入完成")
  132. @classmethod
  133. def redis_pop(cls, env, task_key):
  134. redis_conn = cls.connect_redis(env)
  135. if redis_conn.llen(task_key) == 0:
  136. return None
  137. else:
  138. return redis_conn.rpop(task_key)
  139. if __name__ == "__main__":
  140. print(RedisHelper.redis_pop("dev", "local"))
  141. pass