DBUtils4PG_.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. import concurrent.futures
  2. import datetime
  3. import psycopg2
  4. from pypinyin import pinyin, Style
  5. import traceback
  6. import openpyxl
  7. import msoffcrypto
  8. import io
  9. import requests
  10. import json
  11. import time
  12. import hmac
  13. import hashlib
  14. import base64
  15. import urllib.parse
  16. from openpyxl import Workbook
  17. from Functions import utils
  18. from unitls.settings import DBServer, loginDB, flightDB4
  19. host, port, user, password,online_host, online_port, online_user,online_password = DBServer()
  20. databaseloginDB=loginDB()
  21. databaseflightDB4=flightDB4()
  22. #headerLabel = utils.headerLabel
  23. #headerLabelKey=utils.headerLabelKey
  24. headerLabel = flightinfoLabel
  25. headerLabelKey=enflightifnoLabel
  26. taskType = utils.taskType
  27. taskSTS = utils.taskSTS
  28. flightSTS = utils.flightSTS
  29. flightSTSDic = utils.flightSTSDic
  30. class flightDB():
  31. def __init__(self, host, port, user, password, database):
  32. self.conn = psycopg2.connect(
  33. host=host,
  34. port=port,
  35. user=user,
  36. password=password,
  37. database=database
  38. )
  39. self.c = self.conn.cursor()
  40. def initTable(self, tableName:str,primarykey:str,primarykeyStr:str,keyDict:dict):
  41. try:
  42. keyStr = ''
  43. num = 1
  44. for key in keyDict:
  45. if num !=len(keyDict):
  46. keyStr += '{} {},\n'.format(key,keyDict[key])
  47. else:
  48. keyStr += '{} {}'.format(key, keyDict[key])
  49. num +=1
  50. curStr ="""
  51. create table if not exists {} (
  52. {} {} ,
  53. {}
  54. )
  55. """.format(tableName, primarykey, primarykeyStr,keyStr)
  56. #print(curStr)
  57. self.c.execute(curStr)
  58. self.conn.commit()
  59. except Exception:
  60. #print(curStr)
  61. print(traceback.format_exc())
  62. dingding_alert(traceback.format_exc())
  63. def insertData(self, tableName:str, data:dict, *args):
  64. try:
  65. #curStr1 = 'insert into {} '.format(tableName)
  66. num = 1
  67. curStr2 = ''
  68. for key in data:
  69. if num != len(data):
  70. curStr2+='{},'.format(key)
  71. else:
  72. curStr2+='{}'.format(key)
  73. num+=1
  74. curStr3 = ''
  75. num = 1
  76. for key in data:
  77. if num != len(data):
  78. curStr3+="'{}',".format(data[key])
  79. else:
  80. curStr3+="'{}'".format(data[key])
  81. num+=1
  82. curStr = """
  83. insert into {} ({})
  84. values ({})
  85. """.format(tableName, curStr2, curStr3)
  86. #print(curStr)
  87. self.c.execute(curStr)
  88. if args==():
  89. self.conn.commit()
  90. except Exception:
  91. print(traceback.format_exc())
  92. #print(curStr)
  93. #dingding_alert(traceback.format_exc())
  94. def lazyInsertData(self,tableName:str, data:dict):
  95. self.insertData(tableName, data, 'lazy')
  96. def lazydeleteTable(self,tablename:str):
  97. curStr = """delete from {}""".format(tablename)
  98. self.c.execute(curStr)
  99. def lazyInsertData2(self,tableName:str, curStr2, curStr3):
  100. curStr = """insert into {} ({})values {}""".format(tableName, curStr2, curStr3)
  101. self.c.execute(curStr)
  102. #print(curStr)
  103. def lazyInsertData3(self,curStr1, curStr2, curStr3):
  104. curStr = """insert into display (ID, A, B)values (%s,'%s','%s')"""%(curStr1, curStr2, curStr3)
  105. self.c.execute(curStr)
  106. #print(curStr)
  107. def FunctionCommit(self):
  108. self.conn.commit()
  109. def FunctionRollback(self):
  110. self.conn.rollback()
  111. def deleteTable(self, tablename:str, *condition:str):
  112. try:
  113. #print(condition)
  114. if condition !=():
  115. curStr = """
  116. delete from {} where {}
  117. """.format(tablename, condition[0])
  118. else:
  119. curStr = """
  120. delete from {}
  121. """.format(tablename)
  122. self.c.execute(curStr)
  123. self.conn.commit()
  124. return "ok"
  125. except Exception:
  126. dingding_alert(traceback.format_exc())
  127. dingding_alert(curStr)
  128. return "fail"
  129. def copyTable(self, oldtablename:str, newTablename:str):
  130. try:
  131. curStr = """
  132. drop table {}
  133. """.format(newTablename)
  134. self.c.execute(curStr)
  135. self.conn.commit()
  136. except Exception:
  137. dingding_alert(traceback.format_exc())
  138. dingding_alert(curStr)
  139. def sortTable(self, tablename:str, tableKey:str, fn):
  140. try:
  141. curStr = """
  142. select * from {} order by {} {}
  143. """.format(tablename, tableKey, fn)
  144. #print(curStr)
  145. self.c.execute(curStr)
  146. return self.c.fetchall()
  147. except Exception:
  148. dingding_alert(traceback.format_exc())
  149. def sort_queryTable(self, findkey:str,tablename:str, condition:str,tableKey:str, fn):
  150. try:
  151. curStr = """
  152. select {} from {} where {} order by {} {}
  153. """.format(findkey,tablename, condition,tableKey, fn)
  154. #print(curStr)
  155. self.c.execute(curStr)
  156. return self.c.fetchall()
  157. except Exception:
  158. dingding_alert(traceback.format_exc())
  159. dingding_alert(curStr)
  160. def sort_queryTable2(self, findkey:str,tablename:str, condition:str,tableKey:str, fn,tableKey1:str, fn1):
  161. try:
  162. curStr = """
  163. select {} from {} where {} order by {} {},{} {}
  164. """.format(findkey,tablename, condition,tableKey, fn,tableKey1, fn1)
  165. #print(curStr)
  166. self.c.execute(curStr)
  167. return self.c.fetchall()
  168. except Exception:
  169. dingding_alert(traceback.format_exc())
  170. dingding_alert(curStr)
  171. def queryTabel(self, tablename:str, key:str, condition:str):
  172. try:
  173. curStr1 = """
  174. SELECT EXISTS (
  175. SELECT * FROM pg_catalog.pg_tables
  176. WHERE tablename = '{}' AND schemaname = 'public'
  177. );
  178. """.format(tablename.lower())
  179. self.c.execute(curStr1)
  180. result = self.c.fetchall()[0][0]
  181. if result:
  182. curStr = """
  183. select {} from {} where {}
  184. """.format(key, tablename, condition)
  185. #print(curStr)
  186. self.c.execute(curStr)
  187. return self.c.fetchall()
  188. else:
  189. return None
  190. except Exception:
  191. print(traceback.format_exc())
  192. #print(curStr)
  193. #dingding_alert(traceback.format_exc())
  194. #dingding_alert(curStr)
  195. self.conn.rollback()
  196. def getAlldata(self, tablename:str):
  197. try:
  198. curStr = """select * from {}""".format(tablename)
  199. self.c.execute(curStr)
  200. return self.c.fetchall()
  201. except Exception:
  202. dingding_alert(traceback.format_exc())
  203. dingding_alert(curStr)
  204. def upDateItem(self, tablename:str, dateDic:dict, condition:str, *args):
  205. try:
  206. setStr = ''
  207. for key in dateDic:
  208. if tablename == 'display':
  209. setStr += '{}={},'.format(key, str(dateDic[key]).replace("'","''"))
  210. else:
  211. setStr += '{}={},'.format(key, dateDic[key])
  212. if tablename == 'display':
  213. setStr = setStr[:-1].replace('"',"'")
  214. else:
  215. setStr = setStr[:-1]
  216. curStr = """
  217. update {} set {} where {}
  218. """.format(tablename, setStr, condition)
  219. #print(curStr)
  220. if setStr !="":
  221. self.c.execute(curStr)
  222. if args == ():
  223. self.conn.commit()
  224. except Exception:
  225. print(traceback.format_exc())
  226. #print(curStr)
  227. dingding_alert(traceback.format_exc())
  228. def lazyUpdateItem(self,tablename:str, dateDic:dict, condition:str):
  229. self.upDateItem(tablename,dateDic,condition,'lazy')
  230. def getSingledata(self,findkey:str,tablename:str):
  231. try:
  232. curStr = """
  233. select {} from {}
  234. """.format(findkey,tablename)
  235. #print(curStr)
  236. self.c.execute(curStr)
  237. return self.c.fetchall()
  238. except Exception:
  239. dingding_alert(traceback.format_exc())
  240. def deleteSingledata(self,tablename:str,findkey:str):
  241. try:
  242. curStr = """
  243. delete from {} where {}
  244. """.format(tablename,findkey)
  245. self.c.execute(curStr)
  246. #print(curStr)
  247. self.conn.commit()
  248. except Exception:
  249. dingding_alert(traceback.format_exc())
  250. def close(self):
  251. try:
  252. self.conn.close()
  253. except Exception:
  254. dingding_alert(traceback.format_exc())
  255. def dingding_alert(msg):
  256. dingding_webhook="https://oapi.dingtalk.com/robot/send?access_token=9c78c711f14ba3345d6dc492dc5ca8118c421516d611b5de46854fb8e158565f"
  257. timestamp = str(round(time.time() * 1000))
  258. secret = 'SEC09f744f81b55c8a18f0d77a3ab60bf4e1ec3f16b85f025e6a4f75ddff00a8fd4'
  259. secret_enc = secret.encode('utf-8')
  260. string_to_sign = '{}\n{}'.format(timestamp, secret)
  261. string_to_sign_enc = string_to_sign.encode('utf-8')
  262. hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
  263. sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
  264. dingding_url = dingding_webhook + '&timestamp=' + timestamp + "&sign=" + sign
  265. header = {
  266. "Content-Type": "application/json"
  267. }
  268. data = {
  269. "at": {
  270. "atMobiles":(123,456),
  271. # "isAtAll": True
  272. },
  273. "text": {
  274. "content": msg
  275. },
  276. "msgtype": "text"
  277. }
  278. res = requests.post(url=dingding_url, data=json.dumps(data), headers=header)
  279. if __name__ == '__main__':
  280. fdb = flightDB(host=host,
  281. port=port,
  282. user=user,
  283. password=password,
  284. database=databaseflightDB4
  285. )
  286. loginDB = flightDB(host=host,
  287. port=port,
  288. user=user,
  289. password=password,
  290. database=databaseflightDB4
  291. )