models.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. """
  2. Benchmark models.
  3. """
  4. import json
  5. import os
  6. import psycopg2
  7. from collections import Iterable
  8. from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
  9. from sqlalchemy.orm import sessionmaker
  10. from sqlalchemy.pool import QueuePool
  11. from sqlalchemy.ext.declarative import declarative_base, DeclarativeMeta
  12. DBHOSTNAME = os.environ.get('DBHOST', 'localhost')
  13. def get_conn():
  14. return psycopg2.connect(
  15. user = 'benchmarkdbuser',
  16. password = 'benchmarkdbpass',
  17. host = DBHOSTNAME,
  18. port = '5432',
  19. database = 'hello_world'
  20. )
  21. conn_pool = QueuePool(get_conn, pool_size=100, max_overflow=25, echo=False)
  22. pg = create_engine('postgresql://', pool=conn_pool)
  23. DBSession = sessionmaker(bind=pg)()
  24. metadata = MetaData()
  25. DatabaseBase = declarative_base()
  26. def sqlalchemy_encoder_factory(system_values):
  27. return SQLAlchemyEncoder()
  28. class SQLAlchemyEncoder(json.JSONEncoder):
  29. def __call__(self, obj, system_values):
  30. if isinstance(obj, Iterable):
  31. return json.dumps([self.default(x) for x in obj])
  32. else:
  33. return json.dumps(self.default(obj))
  34. def default(self, obj):
  35. if isinstance(obj.__class__, DeclarativeMeta):
  36. return obj.__json__()
  37. return super(SQLAlchemyEncoder, self).default(obj)
  38. class World(DatabaseBase):
  39. __tablename__ = 'World'
  40. id = Column('id', Integer, primary_key=True)
  41. randomNumber = Column('randomnumber', Integer, nullable=False, server_default='0')
  42. def __json__(self):
  43. return {'id': self.id, 'randomNumber': self.randomNumber}
  44. class Fortune(DatabaseBase):
  45. __tablename__ = 'Fortune'
  46. id = Column('id', Integer, primary_key=True)
  47. message = Column('message', String, nullable=False)
  48. def __json__(self):
  49. return {'id': self.id, 'message': self.message}