Guest User

Untitled

a guest
Mar 11th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.48 KB | None | 0 0
  1. import psycopg2, psycopg2.extras
  2. import sqlalchemy.pool as pool
  3. import psycopg2 as psycopg
  4. psycopg = pool.manage(psycopg, use_threadlocal=True)
  5.  
  6. class Database:
  7.  
  8. def __init__( self, config, readwrite, log):
  9.  
  10. self.items = 0
  11. self.readwrite = False
  12.  
  13. if config.has_section("database"):
  14.  
  15. self.config = config
  16.  
  17. else:
  18.  
  19. log.critical("No DB Config Information")
  20.  
  21. self.log = log
  22.  
  23. self.connect(config, readwrite)
  24.  
  25. pass
  26.  
  27. # ----------------------------------------------------------------------------------------------
  28.  
  29. def connect( self, config, readwrite ):
  30.  
  31. if readwrite:
  32. self.__user = config.get("database", "ruser")
  33. self.__password = config.get("database", "rpassword")
  34. self.__server = config.get("database", "rhost")
  35. self.__database = config.get("database", "rdatabase")
  36. self.readwrite = True
  37. try:
  38.  
  39. self.dbread = psycopg2.connect("host='%s' dbname='%s' user='%s' password='%s'" %(self.__server, self.__database, self.__user, self.__password))
  40.  
  41. except Exception, e:
  42.  
  43. self.log.info("DBRead Connection Error - " + e)
  44.  
  45. self.__user = config.get("database", "wuser")
  46. self.__password = config.get("database", "wpassword")
  47. self.__server = config.get("database", "whost")
  48. self.__database = config.get("database", "wdatabase")
  49.  
  50. try:
  51.  
  52. self.dbwrite = psycopg2.connect("host='%s' dbname='%s' user='%s' password='%s'" %(self.__server, self.__database, self.__user, self.__password))
  53.  
  54. except Exception, e:
  55.  
  56. self.log.critical("DBWrite Connection Error")
  57.  
  58. try:
  59.  
  60. if readwrite:
  61.  
  62. self.sqlread = self.dbread.cursor(cursor_factory = psycopg2.extras.DictCursor)
  63. self.sqlwrite = self.dbwrite.cursor()
  64.  
  65. else:
  66.  
  67. self.sqlread = self.dbwrite.cursor(cursor_factory = psycopg2.extras.DictCursor)
  68. self.sqlwrite = self.dbwrite.cursor()
  69.  
  70. except Exception, e:
  71.  
  72. self.log.critical(e)
  73.  
  74. # ----------------------------------------------------------------------------------------------
  75.  
  76. def setitems(self, items):
  77.  
  78. d = type({"1": "1"})
  79.  
  80. if items is not False and type(items) is not type(d):
  81.  
  82. self.items = len(items)
  83.  
  84. self.itemdict = items
  85. self.itemkeys = []
  86.  
  87. for key in items:
  88.  
  89.  
  90. self.itemkeys.append(key)
  91.  
  92. setattr(self, key, items[key])
  93.  
  94. else:
  95.  
  96. self.log.critical('DBItems: Dictionary not supplied')
  97.  
  98. return False
  99.  
  100. # ----------------------------------------------------------------------------------------------
  101.  
  102. def clear(self):
  103.  
  104. for i in self.itemdict:
  105.  
  106. delattr(self, i)
  107.  
  108. def close(self):
  109.  
  110. if self.readwrite is True:
  111. self.dbread.close()
  112.  
  113. self.dbwrite.close()
  114.  
  115. # ----------------------------------------------------------------------------------------------
  116.  
  117. def insert(self, table, items = False):
  118.  
  119. if items is not False:
  120.  
  121. if self.setitems(items) is False:
  122.  
  123. return False
  124. else:
  125.  
  126. if self.items == 0:
  127.  
  128. self.log.critical("DBInsert: No items selected for insert")
  129.  
  130. return False
  131.  
  132. v = ""
  133. k = ""
  134.  
  135. if self.items > 0:
  136.  
  137. for i in range(self.items):
  138.  
  139. v += '%s, '
  140.  
  141. for i in self.itemkeys:
  142.  
  143. k += "%s, " %(i)
  144.  
  145. self.query = "INSERT INTO %s (%s) VALUES (%s)" %(table, k[:-2], v[:-2])
  146.  
  147. try:
  148.  
  149. sql = self.sqlwrite.execute(self.query, eval(self.getm()))
  150.  
  151. except Exception, e:
  152.  
  153. self.realquery = "%s" %(self.query) %(eval(self.getm()))
  154.  
  155. self.error = e
  156.  
  157. return False
  158.  
  159. self.clear()
  160.  
  161. return sql
  162.  
  163. # ----------------------------------------------------------------------------------------------
  164.  
  165. def update(self, table, items = False, where = False):
  166.  
  167. if items is not False:
  168.  
  169. if self.setitems(items) is False:
  170.  
  171. return False
  172.  
  173. else:
  174.  
  175. if self.items == 0:
  176.  
  177. self.log.critical("DBInsert: No items selected for insert")
  178.  
  179. return False
  180.  
  181. if where is False:
  182.  
  183. self.log.critical("DBUpdate: No where clause specified")
  184.  
  185. return False
  186.  
  187. v = ""
  188. k = ""
  189.  
  190. if self.items > 0:
  191.  
  192.  
  193. for i in self.itemkeys:
  194.  
  195. k += "%s=" % (i)
  196. k += "%s, "
  197.  
  198. self.query = "UPDATE %s SET %s WHERE %s" %(table, k[:-2], where)
  199.  
  200. try:
  201.  
  202. self.realquery = "%s" %(self.query) %(eval(self.getm()))
  203.  
  204. sql = self.sqlwrite.execute(self.query, eval(self.getm()))
  205.  
  206. except Exception, e:
  207.  
  208. self.error = e
  209.  
  210. return False
  211.  
  212. self.clear()
  213.  
  214. return sql
  215.  
  216. # ----------------------------------------------------------------------------------------------
  217.  
  218. def viewm(self):
  219.  
  220. return eval(self.getm())
  221.  
  222. # ----------------------------------------------------------------------------------------------
  223.  
  224. def getm(self):
  225.  
  226. self.m =""
  227.  
  228. for i in self.itemkeys:
  229.  
  230. self.m += "self.%s, " %(i)
  231.  
  232. return self.m[:-2]
  233.  
  234.  
  235. # ----------------------------------------------------------------------------------------------
  236. # ----------------------------------------------------------------------------------------------
  237. # Legacy Support
  238. # ----------------------------------------------------------------------------------------------
  239. # ----------------------------------------------------------------------------------------------
  240.  
  241.  
  242. def read(self, query):
  243.  
  244. if not query:
  245.  
  246. self.log.info("DBRead No Query")
  247.  
  248. else:
  249. try:
  250. self.sqlread.execute(query)
  251.  
  252. if self.sqlread.rowcount > 0:
  253.  
  254. return self.sqlread.fetchall()
  255.  
  256. else:
  257.  
  258. return False
  259.  
  260. except:
  261.  
  262. self.log.info("No results Returned from Query")
  263.  
  264. self.commit()
  265.  
  266. # ----------------------------------------------------------------------------------------------
  267.  
  268. def write( self, query, commit = None ):
  269.  
  270. if not query:
  271.  
  272. self.log.info("DBWrite No Query")
  273.  
  274. else:
  275.  
  276. try:
  277.  
  278. self.sqlwrite.execute(query)
  279.  
  280. if not commit:
  281.  
  282. self.commit()
  283.  
  284. except Exception, e:
  285.  
  286. self.log.critical(e)
  287.  
  288. # ----------------------------------------------------------------------------------------------
  289.  
  290. def commit( self ):
  291.  
  292. self.dbwrite.commit()
  293.  
  294.  
  295. # ----------------------------------------------------------------------------------------------
  296.  
  297. def delete( self, table, field, id ):
  298.  
  299. if not table:
  300.  
  301. self.log.critical("DBDelete: No Table Specified")
  302. return False
  303.  
  304. if not field:
  305.  
  306. self.log.critical("DBDelete: No Field Specified")
  307. return False
  308.  
  309. if not id:
  310.  
  311. self.log.critical("DBDelete: No ID Specified")
  312. return False
  313.  
  314. sql = "DELETE FROM %s WHERE %s ='%s'" %(table, field, id)
  315. self.realquery = sql
  316. self.write(sql)
Add Comment
Please, Sign In to add comment