mysql.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. # -*-coding:UTF-8-*-
  2. #import sys, MySQLdb, traceback
  3. #MySQLdb supports maximum version is python3.4, so we use pymysql
  4. import pymysql
  5. import time
  6. import logging
  7. from video_capture import LOG_LEVEL
  8. def logger_init(LOG_LEVEL):
  9. logger = logging.getLogger('mylogger.c')
  10. #set log level WARNING
  11. logger.setLevel(LOG_LEVEL)
  12. return logger
  13. logger = logger_init(LOG_LEVEL)
  14. class mysql:
  15. def __init__(self,
  16. host='',
  17. user='',
  18. passwd='',
  19. db='',
  20. port=3306,
  21. charset='utf8'
  22. ):
  23. self.host = host
  24. self.user = user
  25. self.passwd = passwd
  26. self.db = db
  27. self.port = port
  28. self.charset = charset
  29. self.conn = None
  30. self._conn()
  31. def _conn(self):
  32. try:
  33. self.conn = pymysql.connect(host=self.host, user=self.user, passwd=self.passwd, database=self.db, port=self.port)
  34. return True
  35. except Exception as e:
  36. #写入日志文件
  37. logger.warning(e)
  38. return False
  39. def _reConn(self, num=3, stime=3): # 重试连接总次数为3次
  40. _number = 0
  41. _status = True
  42. while _status and _number <= num:
  43. try:
  44. self.conn.ping() # cping 校验连接是否异常
  45. _status = False
  46. except Exception as e:
  47. logger.warning('reconnecting...')
  48. if self._conn() == True: # 重新连接,成功退出
  49. _status = False
  50. break
  51. _number += 1
  52. time.sleep(stime) # 连接不成功,休眠3秒钟,继续循环,直到成功或重试次数结束
  53. def select(self, sql=''):
  54. try:
  55. #重复尝试连接一天
  56. self._reConn()
  57. self.cursor = self.conn.cursor()
  58. self.cursor.execute(sql)
  59. result = self.cursor.fetchall()
  60. self.cursor.close()
  61. return result
  62. except Exception as e:
  63. # print "Error %d: %s" % (e.args[0], e.args[1])
  64. return False
  65. def select_limit(self, sql='', offset=0, length=20):
  66. sql = '%s limit %d , %d ;' % (sql, offset, length)
  67. return self.select(sql)
  68. def insert(self,sql='',value=()):
  69. try:
  70. self._reConn()
  71. self.cursor = self.conn.cursor()
  72. self.cursor.execute(sql,value)
  73. self.conn.commit()
  74. self.cursor.close()
  75. return True
  76. except Exception as e:
  77. logger.warning(e)
  78. return False
  79. def query(self, sql=''):
  80. try:
  81. self._reConn()
  82. self.cursor = self.conn.cursor(MySQLdb.cursors.DictCursor)
  83. self.cursor.execute("set names utf8") # utf8 字符集
  84. result = self.cursor.execute(sql)
  85. self.conn.commit()
  86. self.cursor.close()
  87. return (True, result)
  88. except Exception as e:
  89. logger.warning(e)
  90. return False
  91. def update(self,sql=''):
  92. try:
  93. #重复连接5次
  94. self._reConn(num=5,stime=3)
  95. self.cursor = self.conn.cursor()
  96. self.cursor.execute(sql)
  97. self.conn.commit()
  98. self.cursor.close()
  99. return True
  100. except Exception as e:
  101. logger.warning(e)
  102. return False
  103. def close(self):
  104. self.conn.close()
  105. if __name__ == '__main__':
  106. my = mysql('192.168.1.120', 'root', 'sea12345', 'sonar_database', 3306)
  107. #print(my.select_limit('select * from sonar_image_data', 0, 3))
  108. print(my.select('select * from sonar_image_data limit 1'))
  109. # my.close()