mysqlhelper.py 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # author:SunXiuWen
  4. # make_time:2019/1/13
  5. import logging
  6. import sys
  7. from time import sleep
  8. sys.path.append("..")
  9. import pymysql
  10. # 无法加载DButils包
  11. from DBUtils.PooledDB import PooledDB
  12. # from dbutils.pooled_db import PooledDB
  13. """
  14. @功能:创建数据库连接池
  15. """
  16. class DB(object):
  17. """docstring for DbConnection"""
  18. __pool = None
  19. def __init__(self, db_ip, db_port, db_name, db_user, db_password):
  20. self.db_ip = db_ip
  21. self.db_port = db_port
  22. self.db_name = db_name
  23. self.db_user = db_user
  24. self.db_password = db_password
  25. self.pool = self.__get_conn_pool()
  26. # 获取连接
  27. def __get_conn_pool(self):
  28. if self.__pool is None:
  29. try:
  30. self.__pool = PooledDB(creator=pymysql, host=self.db_ip, port=self.db_port,
  31. user=self.db_user, passwd=self.db_password,
  32. db=self.db_name, use_unicode=True, charset='utf8')
  33. except Exception as e:
  34. logging.error("%s : %s" % (Exception, e))
  35. return self.__pool
  36. # 获取连接
  37. def _get_connection(self):
  38. try:
  39. conn = self.pool.connection()
  40. cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
  41. return conn, cursor
  42. except Exception as e:
  43. logging.error(" db.pool.connection ERROR: %s" % e)
  44. return None, None
  45. # 关闭连接
  46. def _close_connection(self, conn, cursor):
  47. if cursor:
  48. cursor.close()
  49. if conn:
  50. conn.close()
  51. # 查询
  52. def query_all_sql(self, sql, param=None):
  53. conn, cursor = self._get_connection()
  54. try:
  55. cursor.execute(sql, param)
  56. result = cursor.fetchall()
  57. self._close_connection(conn, cursor)
  58. except Exception as e:
  59. self._close_connection(conn, cursor)
  60. logging.error(str(e))
  61. result = None
  62. return result
  63. def query_one_sql(self, sql, param=None):
  64. conn, cursor = self._get_connection()
  65. try:
  66. cursor.execute(sql, param)
  67. result = cursor.fetchone()
  68. self._close_connection(conn, cursor)
  69. except Exception as e:
  70. self._close_connection(conn, cursor)
  71. logging.error(str(e))
  72. result = None
  73. return result
  74. # 执行
  75. def execute_sql(self, sql, param=None):
  76. conn, cursor = self._get_connection()
  77. try:
  78. result = cursor.execute(sql, param)
  79. conn.commit()
  80. self._close_connection(conn, cursor)
  81. except Exception as e:
  82. conn.rollback()
  83. self._close_connection(conn, cursor)
  84. logging.error(str(e))
  85. result = None
  86. return result
  87. # class MySqLHelper(object):
  88. # def __init__(self, db_ip, db_port, db_name, db_user, db_password):
  89. # self.db = MyConnectionPool(db_ip, db_port, db_name, db_user, db_password) # 从数据池中获取连接
  90. #
  91. # # def __new__(cls, *args, **kwargs):
  92. # # if not hasattr(cls, 'inst'): # 单例
  93. # # cls.inst = super(MySqLHelper, cls).__new__(cls, *args, **kwargs)
  94. # # return cls.inst
  95. #
  96. # # 封装执行命令
  97. # def execute(self, sql, param=None, autoclose=False):
  98. # """
  99. # 【主要判断是否有参数和是否执行完就释放连接】
  100. # :param sql: 字符串类型,sql语句
  101. # :param param: sql语句中要替换的参数"select %s from tab where id=%s" 其中的%s就是参数
  102. # :param autoclose: 是否关闭连接
  103. # :return: 返回连接conn和游标cursor
  104. # """
  105. # cursor, conn = self.db.getconn() # 从连接池获取连接
  106. # count = 0
  107. # try:
  108. # # count : 为改变的数据条数
  109. # if param:
  110. # count = cursor.execute(sql, param)
  111. # else:
  112. # count = cursor.execute(sql)
  113. # conn.commit()
  114. # if autoclose:
  115. # self.close(cursor, conn)
  116. # except Exception as e:
  117. # print("db error_msg:", e.args)
  118. # return cursor, conn, count
  119. #
  120. # # 释放连接
  121. # def close(self, cursor, conn):
  122. # """释放连接归还给连接池"""
  123. # cursor.close()
  124. # conn.close()
  125. #
  126. # # 查询所有
  127. # def selectall(self, sql, param=None):
  128. # try:
  129. # cursor, conn, count = self.execute(sql, param)
  130. # res = cursor.fetchall()
  131. # return res
  132. # except Exception as e:
  133. # print("db error_msg:", e.args)
  134. # self.close(cursor, conn)
  135. # return count
  136. #
  137. # # 查询单条
  138. # def selectone(self, sql, param=None):
  139. # try:
  140. # cursor, conn, count = self.execute(sql, param)
  141. # res = cursor.fetchone()
  142. # self.close(cursor, conn)
  143. # return res
  144. # except Exception as e:
  145. # print("db error_msg:", e.args)
  146. # self.close(cursor, conn)
  147. # return count
  148. #
  149. # # 增加
  150. # def insertone(self, sql, param):
  151. # try:
  152. # cursor, conn, count = self.execute(sql, param)
  153. # conn.commit()
  154. # self.close(cursor, conn)
  155. # return count
  156. # except Exception as e:
  157. # print("db error_msg:", e.args)
  158. # conn.rollback()
  159. # self.close(cursor, conn)
  160. # return count
  161. #
  162. # # 删除
  163. # def delete(self, sql, param=None):
  164. # try:
  165. # cursor, conn, count = self.execute(sql, param)
  166. # conn.commit()
  167. # self.close(cursor, conn)
  168. # return count
  169. # except Exception as e:
  170. # print("db error_msg:", e.args)
  171. # conn.rollback()
  172. # self.close(cursor, conn)
  173. # return count
  174. #
  175. # # 修改
  176. # def update(self, sql, param=None):
  177. # try:
  178. # cursor, conn, count = self.execute(sql, param)
  179. # conn.commit()
  180. # self.close(cursor, conn)
  181. # return count
  182. # except Exception as e:
  183. # print("db error_msg:", e.args)
  184. # conn.rollback()
  185. # self.close(cursor, conn)
  186. # return count
  187. #
  188. if __name__ == '__main__':
  189. db = DB()
  190. # while True:
  191. # sql1 = 'select * from space where unit=%s'
  192. # args = '11'
  193. # ret = db.query_sql(sql=sql1,param=args)
  194. # print(ret) # (79, 2, 1, 2.2, None, 2, 1)
  195. # 查询单条
  196. sql1 = 'select * from space where unit=%s'
  197. args = '11'
  198. ret = db.query_one_sql(sql=sql1, param=args)
  199. print(ret) # (79, 2, 1, 2.2, None, 2, 1)
  200. # 查询所有
  201. sql2 = "select * from space"
  202. ret = db.query_all_sql(sql=sql2)
  203. print(ret)
  204. # 增加
  205. sql3 = 'insert into test VALUES (%s,%s,%s,%s)'
  206. ret = db.execute_sql(sql3, ('鄂A6X3B0', 'DASDASDEFDFSDASDADASDAS', 1, 2))
  207. print(ret)
  208. # 删除
  209. sql4 = 'delete from test WHERE car=%s'
  210. args = '鄂A6X3B0'
  211. ret = db.execute_sql(sql4, args)
  212. print(ret)
  213. sleep(0.1)
  214. # 修改
  215. sql5 = 'update test set ki=%s WHERE car=%s'
  216. args = ('100', 'wkk')
  217. ret = db.update_sql(sql5, args)
  218. print(ret)