Guest User

Untitled

a guest
Nov 23rd, 2018
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.87 KB | None | 0 0
  1. """A lightweight wrapper around umysql."""
  2. import umysql
  3. import itertools
  4.  
  5.  
  6. class Connection(object):
  7. """A lightweight wrapper around umysql connections.
  8. """
  9. def __init__(self, host, database, user='', password='',
  10. port=3306, autocommit=True):
  11. charset = 'utf8'
  12. self._db = umysql.Connection()
  13. self._db.connect(
  14. host, port, user, password, database, autocommit, charset)
  15.  
  16. if self._db.is_connected:
  17. self._db.query('SET time_zone = "+0:00"')
  18. self._db.query('SET sql_mode = "TRADITIONAL"')
  19.  
  20. def __del__(self):
  21. self.close()
  22.  
  23. def close(self):
  24. self._db.close()
  25.  
  26. def query(self, query, *parameters):
  27. result = self._db.query(query, parameters)
  28. column_names = [r[0] for r in result.fields]
  29. return [Row(itertools.izip(column_names, row)) for row in result.rows]
  30.  
  31. def get(self, query, *parameters):
  32. rows = self.query(query, *parameters)
  33. if not rows:
  34. return None
  35. if len(rows) > 1:
  36. raise Exception(
  37. 'Multiple rows returned for Connection.get() query')
  38. else:
  39. return rows[0]
  40.  
  41. def execute(self, query, *parameters):
  42. return self.execute_lastrowid(query, parameters)
  43.  
  44. def execute_lastrowid(self, query, parameters):
  45. self._db.query(query, parameters)
  46. last_row_id = self._db.query('SELECT LAST_INSERT_ID()')
  47. return last_row_id.rows[0][0]
  48.  
  49. def execute_rowcount(self, query, *parameters):
  50. self._db.query(query, parameters)
  51. affected_rows = self._db.query('SELECT ROW_COUNT()')
  52. return affected_rows.rows[0][0]
  53.  
  54.  
  55. class Row(dict):
  56. """A dict that allows for object-like property access syntax."""
  57. def __getattr__(self, name):
  58. try:
  59. return self[name]
  60. except KeyError:
  61. raise AttributeError(name)
Add Comment
Please, Sign In to add comment