scheduling_db.py 6.2 KB

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