flightDB.py 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. import psycopg2
  2. import traceback
  3. from unitls.LogerinTxt import app_logger
  4. class flightDB():
  5. def __init__(self, host, port, user, password, database):
  6. self.conn = psycopg2.connect(
  7. host=host,
  8. port=port,
  9. user=user,
  10. password=password,
  11. database=database
  12. )
  13. self.c = self.conn.cursor()
  14. def initTable(self, tableName:str,primarykey:str,primarykeyStr:str,keyDict:dict):
  15. try:
  16. keyStr = ''
  17. num = 1
  18. for key in keyDict:
  19. if num !=len(keyDict):
  20. keyStr += '{} {},\n'.format(key,keyDict[key])
  21. else:
  22. keyStr += '{} {}'.format(key, keyDict[key])
  23. num +=1
  24. curStr ="""
  25. create table if not exists {} (
  26. {} {} ,
  27. {}
  28. )
  29. """.format(tableName, primarykey, primarykeyStr,keyStr)
  30. #print(curStr)
  31. self.c.execute(curStr)
  32. self.conn.commit()
  33. except Exception as e:
  34. app_logger.log_error(curStr)
  35. app_logger.log_error(e)
  36. print(traceback.format_exc())
  37. def insertData(self, tableName:str, data:dict, *args):
  38. try:
  39. #curStr1 = 'insert into {} '.format(tableName)
  40. num = 1
  41. curStr2 = ''
  42. for key in data:
  43. if num != len(data):
  44. curStr2+='{},'.format(key)
  45. else:
  46. curStr2+='{}'.format(key)
  47. num+=1
  48. curStr3 = ''
  49. num = 1
  50. for key in data:
  51. if num != len(data):
  52. curStr3+="'{}',".format(data[key])
  53. else:
  54. curStr3+="'{}'".format(data[key])
  55. num+=1
  56. curStr = """
  57. insert into {} ({})
  58. values ({})
  59. """.format(tableName, curStr2, curStr3)
  60. #print(curStr)
  61. self.c.execute(curStr)
  62. if args==():
  63. self.conn.commit()
  64. except Exception as e:
  65. app_logger.log_error(curStr)
  66. app_logger.log_error(e)
  67. print(traceback.format_exc())
  68. def lazyInsertData(self,tableName:str, data:dict):
  69. self.insertData(tableName, data, 'lazy')
  70. def lazydeleteTable(self,tablename:str):
  71. try:
  72. curStr = """delete from {}""".format(tablename)
  73. self.c.execute(curStr)
  74. except Exception as e:
  75. app_logger.log_error(curStr)
  76. app_logger.log_error(e)
  77. def lazyInsertData2(self,tableName:str, curStr2, curStr3):
  78. try:
  79. curStr = """insert into {} ({})values {}""".format(tableName, curStr2, curStr3)
  80. self.c.execute(curStr)
  81. except Exception as e:
  82. app_logger.log_error(curStr)
  83. app_logger.log_error(e)
  84. def lazyInsertData3(self,curStr1, curStr2, curStr3):
  85. try:
  86. curStr = """insert into display (ID, A, B)values (%s,'%s','%s')"""%(curStr1, curStr2, curStr3)
  87. self.c.execute(curStr)
  88. except Exception as e:
  89. app_logger.log_error(curStr)
  90. app_logger.log_error(e)
  91. def FunctionCommit(self):
  92. self.conn.commit()
  93. def FunctionRollback(self):
  94. self.conn.rollback()
  95. def deleteTable(self, tablename:str, *condition:str):
  96. try:
  97. if condition !=():
  98. curStr = """
  99. delete from {} where {}
  100. """.format(tablename, condition[0])
  101. else:
  102. curStr = """
  103. delete from {}
  104. """.format(tablename)
  105. self.c.execute(curStr)
  106. self.conn.commit()
  107. return "ok"
  108. except Exception as e:
  109. app_logger.log_error(curStr)
  110. app_logger.log_error(e)
  111. print(traceback.format_exc())
  112. return "fail"
  113. def copyTable(self, oldtablename:str, newTablename:str):
  114. try:
  115. curStr = """
  116. drop table {}
  117. """.format(newTablename)
  118. self.c.execute(curStr)
  119. self.conn.commit()
  120. except Exception as e:
  121. app_logger.log_error(curStr)
  122. app_logger.log_error(e)
  123. print(traceback.format_exc())
  124. def sortTable(self, tablename:str, tableKey:str, fn):
  125. try:
  126. curStr = """
  127. select * from {} order by {} {}
  128. """.format(tablename, tableKey, fn)
  129. #print(curStr)
  130. self.c.execute(curStr)
  131. return self.c.fetchall()
  132. except Exception as e:
  133. app_logger.log_error(curStr)
  134. app_logger.log_error(e)
  135. print(traceback.format_exc())
  136. def sort_queryTable(self, findkey:str,tablename:str, condition:str,tableKey:str, fn):
  137. try:
  138. curStr = """
  139. select {} from {} where {} order by {} {}
  140. """.format(findkey,tablename, condition,tableKey, fn)
  141. #print(curStr)
  142. self.c.execute(curStr)
  143. return self.c.fetchall()
  144. except Exception as e:
  145. app_logger.log_error(curStr)
  146. app_logger.log_error(e)
  147. print(traceback.format_exc())
  148. def sort_queryTable2(self, findkey:str,tablename:str, condition:str,tableKey:str, fn,tableKey1:str, fn1):
  149. try:
  150. curStr = """
  151. select {} from {} where {} order by {} {},{} {}
  152. """.format(findkey,tablename, condition,tableKey, fn,tableKey1, fn1)
  153. #print(curStr)
  154. self.c.execute(curStr)
  155. return self.c.fetchall()
  156. except Exception as e:
  157. app_logger.log_error(curStr)
  158. app_logger.log_error(e)
  159. print(traceback.format_exc())
  160. def queryTabel(self, tablename: str, key: str, condition: str):
  161. try:
  162. # 检查表是否存在
  163. curStr1 = """
  164. SELECT EXISTS (
  165. SELECT * FROM pg_catalog.pg_tables
  166. WHERE tablename = %s AND schemaname = 'public'
  167. );
  168. """
  169. self.c.execute(curStr1, (tablename.lower(),))
  170. table_exists = self.c.fetchone()[0]
  171. if table_exists:
  172. # 防止SQL注入,使用参数化查询
  173. curStr = f"SELECT {key} FROM {tablename} WHERE {condition}"
  174. self.c.execute(curStr)
  175. return self.c.fetchall()
  176. else:
  177. print(f"表 '{tablename}' 不存在")
  178. return [] # 返回空列表而不是None,便于统一处理
  179. except Exception as e:
  180. app_logger.log_error(e)
  181. print(traceback.format_exc())
  182. self.conn.rollback()
  183. return []
  184. def getAlldata(self, tablename:str):
  185. try:
  186. curStr = """select * from {}""".format(tablename)
  187. self.c.execute(curStr)
  188. return self.c.fetchall()
  189. except Exception as e:
  190. app_logger.log_error(curStr)
  191. app_logger.log_error(e)
  192. print(traceback.format_exc())
  193. def upDateItem(self, tablename:str, dateDic:dict, condition:str, *args):
  194. try:
  195. setStr = ''
  196. for key in dateDic:
  197. if tablename == 'display':
  198. setStr += '{}={},'.format(key, str(dateDic[key]).replace("'","''"))
  199. else:
  200. setStr += '{}={},'.format(key, dateDic[key])
  201. if tablename == 'display':
  202. setStr = setStr[:-1].replace('"',"'")
  203. else:
  204. setStr = setStr[:-1]
  205. curStr = """
  206. update {} set {} where {}
  207. """.format(tablename, setStr, condition)
  208. #print(curStr)
  209. if setStr !="":
  210. self.c.execute(curStr)
  211. if args == ():
  212. self.conn.commit()
  213. except Exception as e:
  214. app_logger.log_error(curStr)
  215. app_logger.log_error(e)
  216. print(traceback.format_exc())
  217. def lazyUpdateItem(self,tablename:str, dateDic:dict, condition:str):
  218. self.upDateItem(tablename,dateDic,condition,'lazy')
  219. def getSingledata(self,findkey:str,tablename:str):
  220. try:
  221. curStr = """
  222. select {} from {}
  223. """.format(findkey,tablename)
  224. self.c.execute(curStr)
  225. return self.c.fetchall()
  226. except Exception as e:
  227. app_logger.log_error(curStr)
  228. app_logger.log_error(e)
  229. print(traceback.format_exc())
  230. def deleteSingledata(self,tablename:str,findkey:str):
  231. try:
  232. curStr = """
  233. delete from {} where {}
  234. """.format(tablename,findkey)
  235. self.c.execute(curStr)
  236. #print(curStr)
  237. self.conn.commit()
  238. except Exception as e:
  239. app_logger.log_error(curStr)
  240. app_logger.log_error(e)
  241. print(traceback.format_exc())
  242. def close(self):
  243. try:
  244. self.conn.close()
  245. except Exception as e:
  246. app_logger.log_error(e)
  247. print(traceback.format_exc())