db.py 858 B

123456789101112131415161718192021222324252627282930313233
  1. from contextlib import contextmanager
  2. from sqlalchemy import create_engine
  3. from sqlalchemy.ext.declarative import declarative_base
  4. # from sqlalchemy.orm import Session
  5. from sqlalchemy.orm import sessionmaker
  6. from sqlalchemy.orm.scoping import scoped_session
  7. from core import constants
  8. engine = create_engine(
  9. f'sqlite:///{constants.DB_PATH}',
  10. connect_args={'check_same_thread': False},
  11. echo=constants.SQL_ALCHEMY_VERBOSE)
  12. Base = declarative_base()
  13. session_factory = sessionmaker(autocommit=False, autoflush=False, bind=engine)
  14. Session = scoped_session(session_factory)
  15. # session_ = Session()
  16. # def session():
  17. # return Session(engine)
  18. def create():
  19. if constants.DB_PATH.exists():
  20. raise FileExistsError('A db file already exists')
  21. Base.metadata.create_all(engine)
  22. def close():
  23. Session.remove()
  24. engine.dispose()