db.py 788 B

1234567891011121314151617181920212223242526272829
  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. def create():
  16. if constants.DB_PATH.exists():
  17. raise FileExistsError('A db file already exists')
  18. Base.metadata.create_all(engine)
  19. def close():
  20. Session.remove()
  21. engine.dispose()