models.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. def get_conn():
  13. return psycopg2.connect(
  14. user = 'benchmarkdbuser',
  15. password = 'benchmarkdbpass',
  16. host = 'TFB-database',
  17. port = '5432',
  18. database = 'hello_world'
  19. )
  20. conn_pool = QueuePool(get_conn, pool_size=100, max_overflow=25, echo=False)
  21. pg = create_engine('postgresql://', pool=conn_pool)
  22. DBSession = sessionmaker(bind=pg)()
  23. metadata = MetaData()
  24. DatabaseBase = declarative_base()
  25. def sqlalchemy_encoder_factory(system_values):
  26. return SQLAlchemyEncoder()
  27. class SQLAlchemyEncoder(json.JSONEncoder):
  28. def __call__(self, obj, system_values):
  29. if isinstance(obj, Iterable):
  30. return json.dumps([self.default(x) for x in obj])
  31. else:
  32. return json.dumps(self.default(obj))
  33. def default(self, obj):
  34. if isinstance(obj.__class__, DeclarativeMeta):
  35. return obj.__json__()
  36. return super(SQLAlchemyEncoder, self).default(obj)
  37. class World(DatabaseBase):
  38. __tablename__ = 'world'
  39. id = Column('id', Integer, primary_key=True)
  40. randomNumber = Column('randomnumber', Integer, nullable=False, server_default='0')
  41. def __json__(self):
  42. return {'id': self.id, 'randomNumber': self.randomNumber}
  43. class Fortune(DatabaseBase):
  44. __tablename__ = 'fortune'
  45. id = Column('id', Integer, primary_key=True)
  46. message = Column('message', String, nullable=False)
  47. def __json__(self):
  48. return {'id': self.id, 'message': self.message}