database.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. # -*- coding: utf-8 -*-
  2. import os
  3. from operator import itemgetter
  4. from gluon.storage import Storage
  5. from gluon.dal import DAL, Field, Row
  6. DBHOST = os.environ.get('DBHOST', 'localhost')
  7. DATABASE_URI = 'mysql://benchmarkdbuser:benchmarkdbpass@%s:3306/hello_world' % DBHOST
  8. class Dal(object):
  9. def __init__(self, table=None, pool_size=8):
  10. self.db = DAL(DATABASE_URI, migrate_enabled=False, pool_size=pool_size)
  11. if table == 'World':
  12. self.db.define_table('World', Field('randomNumber', 'integer'))
  13. elif table == 'Fortune':
  14. self.db.define_table('Fortune', Field('message'))
  15. def get_world(self, wid):
  16. return self.db(self.db.World.id == wid).select(cacheable=True)[0].as_dict()
  17. def update_world(self, wid, randomNumber):
  18. self.db(self.db.World.id == wid).update(randomNumber=randomNumber)
  19. def get_fortunes(self, new_message):
  20. fortunes = self.db(self.db.Fortune).select(cacheable=True)
  21. fortunes.records.append(Row(new_message))
  22. return fortunes.sort(itemgetter('message'))
  23. class RawDal(Dal):
  24. def __init__(self):
  25. super(RawDal, self).__init__()
  26. self.world_updates = []
  27. def get_world(self, wid):
  28. return self.db.executesql('SELECT * FROM World WHERE id = %s',
  29. placeholders=[wid], as_dict=True)[0]
  30. def update_world(self, wid, randomNumber):
  31. self.world_updates.extend([randomNumber, wid])
  32. def flush_world_updates(self):
  33. query = ';'.join('UPDATE World SET randomNumber=%s WHERE id=%s'
  34. for _ in xrange(len(self.world_updates) / 2))
  35. self.db.executesql(query, placeholders=self.world_updates)
  36. def get_fortunes(self, new_message):
  37. fortunes = self.db.executesql('SELECT * FROM Fortune', as_dict=True)
  38. fortunes.append(new_message)
  39. return sorted(fortunes, key=itemgetter('message'))
  40. def num_queries(queries):
  41. try:
  42. num = int(queries)
  43. return 1 if num < 1 else 500 if num > 500 else num
  44. except ValueError:
  45. return 1