算法暴露接口(xhs、dy、ks、wx、hnw)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

233 lines
7.5 KiB

7 months ago
  1. import threading
  2. import pymysql
  3. from pymysql.cursors import DictCursor
  4. from dbutils.pooled_db import PooledDB
  5. class CRAWLER_DB_CONF(object):
  6. """
  7. """
  8. DBHOST = '172.18.1.181'
  9. DBPORT = 3306
  10. DBUSER = 'crawl'
  11. DBPWD = 'crawl'
  12. DBNAME = 'dianpinggfy'
  13. DBCHAR = 'utf8'
  14. DB_FULL_NAME = "dianpinggfy"
  15. class CRAWLER_DB_CONF_KS(object):
  16. """
  17. """
  18. DBHOST = '172.18.1.134'
  19. DBPORT = 3306
  20. DBUSER = 'crawl666'
  21. DBPWD = 'lx2a4jN1xFT96kj20LU='
  22. DBNAME = 'KS_storage'
  23. DBCHAR = 'utf8'
  24. DB_FULL_NAME = "KS_storage"
  25. class CRAWLER_DB_CONF_DY(object):
  26. """
  27. """
  28. DBHOST = '172.18.1.181'
  29. DBPORT = 3306
  30. DBUSER = 'crawl'
  31. DBPWD = 'crawl'
  32. DBNAME = 'test'
  33. DBCHAR = 'utf8'
  34. DB_FULL_NAME = "test"
  35. class MysqlPoolClient(object):
  36. """
  37. MYSQL数据库对象 , conn = Mysql.getConn()
  38. ;conn.close()del conn
  39. """
  40. # 连接池对象
  41. __pool = {}
  42. __lock = threading.Lock()
  43. # TODO(YaoPeng): 反复加锁影响性能,但是爬虫场景下,可以暂时容忍
  44. def __init__(self, db_conf):
  45. MysqlPoolClient.__lock.acquire()
  46. # 数据库构造函数,从连接池中取出连接,并生成操作游标
  47. # pip install DBUtils
  48. self._conn = MysqlPoolClient.__getConn(db_conf)
  49. self._cursor = self._conn.cursor()
  50. MysqlPoolClient.__lock.release()
  51. def __del__(self):
  52. self.dispose()
  53. @staticmethod
  54. def __getConn(db_conf):
  55. pool_name = db_conf.DB_FULL_NAME
  56. """
  57. @summary:
  58. @return MySQLdb.connection
  59. """
  60. if pool_name not in MysqlPoolClient.__pool:
  61. MysqlPoolClient.__pool[pool_name] = PooledDB(creator=pymysql,
  62. mincached=1,
  63. maxcached=20,
  64. host=db_conf.DBHOST,
  65. port=db_conf.DBPORT,
  66. user=db_conf.DBUSER,
  67. passwd=db_conf.DBPWD,
  68. db=db_conf.DBNAME,
  69. use_unicode=True,
  70. charset=db_conf.DBCHAR,
  71. cursorclass=DictCursor)
  72. return MysqlPoolClient.__pool[pool_name].connection()
  73. def getAll(self, sql, param=None):
  74. """
  75. @summary:
  76. @param sql:使[param]
  77. @param param: /
  78. @return: result list()/boolean
  79. """
  80. if param is None:
  81. count = self._cursor.execute(sql)
  82. else:
  83. count = self._cursor.execute(sql, param)
  84. if count > 0:
  85. query_result = self._cursor.fetchall()
  86. else:
  87. query_result = False
  88. return query_result
  89. def getOne(self, sql, param=None):
  90. """
  91. @summary:
  92. @param sql:使[param]
  93. @param param: /
  94. @return: result list/boolean
  95. """
  96. if param is None:
  97. count = self._cursor.execute(sql)
  98. else:
  99. count = self._cursor.execute(sql, param)
  100. if count > 0:
  101. query_result = self._cursor.fetchone()
  102. else:
  103. query_result = False
  104. return count,query_result
  105. def getMany(self, sql, num, param=None):
  106. """
  107. @summary: num条结果
  108. @param sql:使[param]
  109. @param num:
  110. @param param: /
  111. @return: result list/boolean
  112. """
  113. if param is None:
  114. count = self._cursor.execute(sql)
  115. else:
  116. count = self._cursor.execute(sql, param)
  117. if count > 0:
  118. query_result = self._cursor.fetchmany(num)
  119. else:
  120. query_result = False
  121. return query_result
  122. def insertOne(self, sql, value=None):
  123. """
  124. @summary:
  125. @param sql:
  126. @param value:tuple/list
  127. @return: insertId
  128. """
  129. self._cursor.execute(sql, value)
  130. return self.__getInsertId()
  131. def insertMany(self, sql, values):
  132. """
  133. @summary:
  134. @param sql:
  135. @param values:tuple(tuple)/list[list]
  136. @return: count
  137. """
  138. count = self._cursor.executemany(sql, values)
  139. return count
  140. def updateMany(self, sql, values):
  141. """
  142. @summary:
  143. @param sql:
  144. @param values:tuple(tuple)/list[list]
  145. @return: count
  146. """
  147. count = self._cursor.executemany(sql, values)
  148. return count
  149. def __getInsertId(self):
  150. """
  151. id,
  152. """
  153. self._cursor.execute("SELECT @@IDENTITY AS id")
  154. result = self._cursor.fetchall()
  155. return result[0]['id']
  156. def __query(self, sql, param=None, commit=True):
  157. if param is None:
  158. count = self._cursor.execute(sql)
  159. else:
  160. count = self._cursor.execute(sql, param)
  161. if commit:
  162. self._conn.commit()
  163. return count
  164. def update(self, sql, param=None):
  165. """
  166. @summary:
  167. @param sql: 使(%s,%s)
  168. @param param: tuple/list
  169. @return: count
  170. """
  171. return self.__query(sql, param)
  172. def delete(self, sql, param=None):
  173. """
  174. @summary:
  175. @param sql: 使(%s,%s)
  176. @param param: tuple/list
  177. @return: count
  178. """
  179. return self.__query(sql, param)
  180. def begin(self):
  181. """
  182. @summary:
  183. """
  184. self._conn.autocommit(0)
  185. def end(self, option='commit'):
  186. """
  187. @summary:
  188. """
  189. if option == 'commit':
  190. self._conn.commit()
  191. else:
  192. self._conn.rollback()
  193. def dispose(self, is_end=1):
  194. """
  195. @summary:
  196. """
  197. MysqlPoolClient.__lock.acquire()
  198. if is_end == 1:
  199. self.end('commit')
  200. else:
  201. self.end('rollback')
  202. self._cursor.close()
  203. self._conn.close()
  204. MysqlPoolClient.__lock.release()