bgg_api/src/modules/db_connection.py

52 lines
No EOL
1.6 KiB
Python

from sqlmodel import create_engine, SQLModel, Session, select
from src.config import definitions
import os
from typing import Union
from src.classes import boardgame_classes
sqlite_url = definitions.SQLITE_URL
connect_args = {"check_same_thread": False}
engine = create_engine(sqlite_url, echo=True, connect_args=connect_args)
def add_boardgame(boardgame: Union[
boardgame_classes.BoardGame, boardgame_classes.BoardGameExpansion,
boardgame_classes.OwnedBoardGame, boardgame_classes.OwnedBoardGameExpansion,
boardgame_classes.WishlistBoardGame, boardgame_classes.WishlistBoardGameExpansion]):
with Session(engine) as session:
session.add(boardgame)
session.commit()
session.refresh(boardgame)
def get_base_boardgames(boardgame_id = None) -> list[boardgame_classes.BoardGame]:
with Session(engine) as session:
session.expire_on_commit = False
if boardgame_id == None:
statement = select(boardgame_classes.BoardGame)
else:
statement = select(boardgame_classes.BoardGame).where(boardgame_classes.BoardGame.id == boardgame_id)
results = session.exec(statement)
boardgame_list = results.all()
return boardgame_list
def get_all_owned_boardgames() -> list[boardgame_classes.OwnedBoardGame]:
with Session(engine) as session:
statement = select(boardgame_classes.OwnedBoardGame)
results = session.exec(statement)
boardgame_list = results.all()
return boardgame_list
def delete_database():
os.remove(definitions.DATABASE_FILE_PATH)
def create_db_and_tables():
SQLModel.metadata.create_all(engine)