operate_mysql.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import pymysql
  2. import traceback
  3. import time
  4. import datetime
  5. from configuration import Configuration
  6. class OperateMysql():
  7. config = Configuration().get_system_config()
  8. config = config["hardDiskdataBase"]
  9. def __init__(self, config=config, port=3306, charset='utf8'):
  10. self.host = config['ip']
  11. self.user = config['username']
  12. self.passwd = config['password']
  13. self.db = config['dataBaseName']
  14. self.port = port
  15. self.charset = charset
  16. self.conn = None
  17. self._conn()
  18. def _conn(self):
  19. try:
  20. self.conn = pymysql.connect(host=self.host, user=self.user, password=self.passwd, db=self.db, port=self.port, autocommit=True)
  21. return True
  22. except Exception as e:
  23. print(e)
  24. return False
  25. def _reConn(self, num=28800, stime=3): #重试连接总次数为1天,这里根据实际情况自己设置,如果服务器宕机1天都没发现就......
  26. _number = 0
  27. _status = True
  28. while _status and _number <= num:
  29. try:
  30. self.conn.ping() #cping 校验连接是否异常
  31. _status = False
  32. except:
  33. if self._conn()==True: #重新连接,成功退出
  34. _status = False
  35. break
  36. _number +=1
  37. time.sleep(stime) #连接不成功,休眠3秒钟,继续循环,知道成功或重试次数结束
  38. def execute_sql(self, sql):
  39. try:
  40. self._reConn()
  41. self.cursor = self.conn.cursor(cursor=pymysql.cursors.DictCursor)
  42. self.cursor.execute(sql)
  43. results = self.cursor.fetchall()
  44. self.cursor.close()
  45. return results
  46. except:
  47. print(traceback.format_exc())
  48. return None
  49. def return_result(self, point_statistic, serial_number):
  50. # "parameter":{"key": "s2", "basic_data": "c2", "begin_time": "1618389390", "end_time": "1618389572"}
  51. begin_time = datetime.datetime.fromtimestamp(int(point_statistic['begin_time']))
  52. end_time = datetime.datetime.fromtimestamp(int(point_statistic['end_time']))
  53. sql = "SELECT device_name FROM data_point_tbl WHERE serial_number=%s;" % (serial_number)
  54. res = self.execute_sql(sql)
  55. table_name = 'table_' + res[0]['device_name']
  56. dict_res = {"table_name": table_name, "begin_time": begin_time, "end_time": end_time}
  57. return dict_res
  58. # def database_parameters(self):
  59. # config = {'ip': 'localhost', 'username': 'rootroot', 'password': 'rootroot', 'dataBaseName': 'shucai'}
  60. # self.config = config