Guest User

Untitled

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