from sqlmodel import Field, Relationship, SQLModel, Session, create_engine class TeamBase(SQLModel): name: str = Field(index=True) headquarters: str class Team(TeamBase, table=True): id: int | None = Field(default=None, primary_key=True) heroes: list["Hero"] = Relationship(back_populates="team") class TeamCreate(TeamBase): pass class TeamRead(TeamBase): name: str | None = None headquarters: str | None = None class HeroBase(SQLModel): name: str = Field(index=True) secret_name: str age: int | None = Field(index=True, default=None) team_id: int | None = Field(default=None, foreign_key="team.id") class Hero(HeroBase, table=True): id: int | None = Field(default=None, primary_key=True) hashed_password: str = Field() team: Team | None = Relationship(back_populates="heroes") class HeroCreate(HeroBase): password: str class HeroRead(HeroBase): id: int class HeroUpdate(SQLModel): name: str | None = None secret_name: str | None = None age: int | None = None password: str | None = None team_id: int | None = None class TeamReadWithHeroes(TeamRead): heroes: list[HeroRead] = [] class HeroReadWithTeam(HeroRead): team: TeamRead | None = None SQLITE_FILE_NAME = "database.db" DATABASE_URL = f"sqlite:///{SQLITE_FILE_NAME}" connect_args = {"check_same_thread": False} engine = create_engine(DATABASE_URL, connect_args=connect_args) def create_db_and_tables(): SQLModel.metadata.create_all(engine) def get_session(): with Session(engine) as session: yield session