Advertisement
Guest User

Untitled

a guest
Jun 6th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. import psycopg2, urlparse, re, os
  3.  
  4. class Db:
  5. """Connexion à la base de données postgres de l'environnement Heroku."""
  6.  
  7. def __init__(self):
  8. """Initiate a connection to the default postgres database."""
  9. urlparse.uses_netloc.append("postgres")
  10. url = urlparse.urlparse(os.environ["DATABASE_URL"])
  11.  
  12. self.conn = psycopg2.connect(
  13. database=url.path[1:],
  14. user=url.username,
  15. password=url.password,
  16. host=url.hostname,
  17. port=url.port
  18. )
  19. self.cur = self.conn.cursor()
  20.  
  21. def describeRow(self, row, columns, subkeys = None):
  22. dRow = dict()
  23. if subkeys == None:
  24. for (i,cName) in enumerate(columns):
  25. dRow[cName] = row[i]
  26. else:
  27. for (i,cName) in enumerate(columns):
  28. k = cName if cName not in subkeys else subkeys[cName]
  29. if k != "":
  30. dRow[k] = row[i]
  31. return dRow
  32.  
  33. def rowcount(self):
  34. return self.cur.rowcount
  35.  
  36. def lastrowid(self):
  37. return self.cur.lastrowid()
  38.  
  39. def fetchall(self, subkeys = None):
  40. rows = self.cur.fetchall()
  41. if rows != None:
  42. columns = map(lambda d: d[0], self.cur.description)
  43. rows = [self.describeRow(row, columns, subkeys) for row in rows]
  44. else:
  45. rows = []
  46. return rows
  47.  
  48. def fetchone(self, subkeys = None):
  49. row = self.cur.fetchone()
  50. if row != None:
  51. columns = map(lambda d: d[0], self.cur.description)
  52. row = self.describeRow(row, columns, subkeys)
  53. return row
  54.  
  55. def execute(self, sql, sqlParams=None):
  56. if sqlParams == None:
  57. self.cur.execute(sql)
  58. else:
  59. sql = re.sub(r"@\(([^\)]+)\)", "%(\g<1>)s", sql)
  60. self.cur.execute(sql, sqlParams)
  61. self.conn.commit()
  62.  
  63. def select(self, sql, sqlParams=None, subkeys=None):
  64. self.execute(sql, sqlParams)
  65. return self.fetchall(subkeys)
  66.  
  67. def close(self):
  68. self.cur.close()
  69. self.conn.close()
  70.  
  71. def executeFile(self, filename):
  72. f = file(filename, "r")
  73. sql = f.read()
  74. f.close()
  75. self.execute(sql)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement