mysqlhelper.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. from db_dbutils_init import get_my_connection
  2. """执行语句查询有结果返回结果没有返回0;增/删/改返回变更数据条数,没有返回0"""
  3. class MySqLHelper(object):
  4. def __init__(self):
  5. self.db = get_my_connection() # 从数据池中获取连接
  6. def __new__(cls, *args, **kwargs):
  7. if not hasattr(cls, 'inst'): # 单例
  8. cls.inst = super(MySqLHelper, cls).__new__(cls, *args, **kwargs)
  9. return cls.inst
  10. # 封装执行命令
  11. def execute(self, sql, param=None, autoclose=False):
  12. """
  13. 【主要判断是否有参数和是否执行完就释放连接】
  14. :param sql: 字符串类型,sql语句
  15. :param param: sql语句中要替换的参数"select %s from tab where id=%s" 其中的%s就是参数
  16. :param autoclose: 是否关闭连接
  17. :return: 返回连接conn和游标cursor
  18. """
  19. cursor, conn = self.db.getconn() # 从连接池获取连接
  20. count = 0
  21. try:
  22. # count : 为改变的数据条数
  23. if param:
  24. count = cursor.execute(sql, param)
  25. else:
  26. count = cursor.execute(sql)
  27. conn.commit()
  28. if autoclose:
  29. self.close(cursor, conn)
  30. except Exception as e:
  31. pass
  32. return cursor, conn, count
  33. # 执行多条命令
  34. # def executemany(self, lis):
  35. # """
  36. # :param lis: 是一个列表,里面放的是每个sql的字典'[{"sql":"xxx","param":"xx"}....]'
  37. # :return:
  38. # """
  39. # cursor, conn = self.db.getconn()
  40. # try:
  41. # for order in lis:
  42. # sql = order['sql']
  43. # param = order['param']
  44. # if param:
  45. # cursor.execute(sql, param)
  46. # else:
  47. # cursor.execute(sql)
  48. # conn.commit()
  49. # self.close(cursor, conn)
  50. # return True
  51. # except Exception as e:
  52. # print(e)
  53. # conn.rollback()
  54. # self.close(cursor, conn)
  55. # return False
  56. # 释放连接
  57. def close(self, cursor, conn):
  58. """释放连接归还给连接池"""
  59. cursor.close()
  60. conn.close()
  61. # 查询所有
  62. def selectall(self, sql, param=None):
  63. try:
  64. cursor, conn, count = self.execute(sql, param)
  65. res = cursor.fetchall()
  66. return res
  67. except Exception as e:
  68. print(e)
  69. self.close(cursor, conn)
  70. return count
  71. # 查询单条
  72. def selectone(self, sql, param=None):
  73. try:
  74. cursor, conn, count = self.execute(sql, param)
  75. res = cursor.fetchone()
  76. self.close(cursor, conn)
  77. return res
  78. except Exception as e:
  79. print("error_msg:", e.args)
  80. self.close(cursor, conn)
  81. return count
  82. # 增加
  83. def insertone(self, sql, param):
  84. try:
  85. cursor, conn, count = self.execute(sql, param)
  86. # _id = cursor.lastrowid() # 获取当前插入数据的主键id,该id应该为自动生成为好
  87. conn.commit()
  88. self.close(cursor, conn)
  89. return count
  90. # 防止表中没有id返回0
  91. # if _id == 0:
  92. # return True
  93. # return _id
  94. except Exception as e:
  95. print(e)
  96. conn.rollback()
  97. self.close(cursor, conn)
  98. return count
  99. # 增加多行
  100. def insertmany(self, sql, param):
  101. """
  102. :param sql:
  103. :param param: 必须是元组或列表[(),()]或((),())
  104. :return:
  105. """
  106. cursor, conn, count = self.db.getconn()
  107. try:
  108. cursor.executemany(sql, param)
  109. conn.commit()
  110. return count
  111. except Exception as e:
  112. print(e)
  113. conn.rollback()
  114. self.close(cursor, conn)
  115. return count
  116. # 删除
  117. def delete(self, sql, param=None):
  118. try:
  119. cursor, conn, count = self.execute(sql, param)
  120. self.close(cursor, conn)
  121. return count
  122. except Exception as e:
  123. print(e)
  124. conn.rollback()
  125. self.close(cursor, conn)
  126. return count
  127. # 更新
  128. def update(self, sql, param=None):
  129. try:
  130. cursor, conn, count = self.execute(sql, param)
  131. conn.commit()
  132. self.close(cursor, conn)
  133. return count
  134. except Exception as e:
  135. print(e)
  136. conn.rollback()
  137. self.close(cursor, conn)
  138. return count
  139. if __name__ == '__main__':
  140. db = MySqLHelper()
  141. # # 查询单条
  142. # sql1 = 'select * from userinfo where name=%s'
  143. # args = 'python'
  144. # ret = db.selectone(sql=sql1, param=args)
  145. # print(ret) # (None, b'python', b'123456', b'0')
  146. # 增加单条
  147. # sql2 = 'insert into userinfo (name,password) VALUES (%s,%s)'
  148. # ret = db.insertone(sql2, ('old2','22222'))
  149. # print(ret)
  150. # 增加多条
  151. # sql3 = 'insert into userinfo (name,password) VALUES (%s,%s)'
  152. # li = li = [
  153. # ('分省', '123'),
  154. # ('到达','456')
  155. # ]
  156. # ret = db.insertmany(sql3,li)
  157. # print(ret)
  158. # 删除
  159. # sql4 = 'delete from userinfo WHERE name=%s'
  160. # args = 'xxxx'
  161. # ret = db.delete(sql4, args)
  162. # print(ret)
  163. # 更新
  164. # sql5 = r'update userinfo set password=%s WHERE name LIKE %s'
  165. # args = ('993333993', '%old%')
  166. # ret = db.update(sql5, args)
  167. # print(ret)