session.py 824 B

123456789101112131415161718192021222324252627282930313233
  1. from sqlalchemy import create_engine
  2. from sqlalchemy.orm import sessionmaker
  3. from sqlalchemy.ext.declarative import declarative_base
  4. from celery.utils.compat import defaultdict
  5. ResultModelBase = declarative_base()
  6. _SETUP = defaultdict(lambda: False)
  7. _ENGINES = {}
  8. def get_engine(dburi, **kwargs):
  9. if dburi not in _ENGINES:
  10. _ENGINES[dburi] = create_engine(dburi, **kwargs)
  11. return _ENGINES[dburi]
  12. def create_session(dburi, **kwargs):
  13. engine = get_engine(dburi, **kwargs)
  14. return engine, sessionmaker(bind=engine)
  15. def setup_results(engine):
  16. if not _SETUP["results"]:
  17. ResultModelBase.metadata.create_all(engine)
  18. _SETUP["results"] = True
  19. def ResultSession(dburi, **kwargs):
  20. engine, session = create_session(dburi, **kwargs)
  21. setup_results(engine)
  22. return session()