1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| from sqlmodel import Field, Relationship, Session, SQLModel, create_engine
class HeroTeamLink(SQLModel, table=True): team_id: int | None = Field(default=None, foreign_key="team.id", primary_key=True) hero_id: int | None = Field(default=None, foreign_key="hero.id", primary_key=True)
class Team(SQLModel, table=True): id: int | None = Field(default=None, primary_key=True) name: str = Field(index=True) headquarters: str
heroes: list["Hero"] = Relationship(back_populates="teams", link_model=HeroTeamLink)
class Hero(SQLModel, table=True): id: int | None = Field(default=None, primary_key=True) name: str = Field(index=True) secret_name: str age: int | None = Field(default=None, index=True)
teams: list[Team] = Relationship(back_populates="heroes", link_model=HeroTeamLink)
def test(): sqlite_file_name = "database.db" sqlite_url = f"sqlite:///{sqlite_file_name}" engine = create_engine(sqlite_url, echo=True) SQLModel.metadata.drop_all(engine) SQLModel.metadata.create_all(engine)
with Session(engine) as session: team_preventers = Team(name="Preventers", headquarters="Sharp Tower") team_z_force = Team(name="Z-Force", headquarters="Sister Margaret's Bar")
hero_deadpond = Hero( name="Deadpond", secret_name="Dive Wilson", teams=[team_z_force, team_preventers], ) hero_rusty_man = Hero( name="Rusty-Man", secret_name="Tommy Sharp", age=48, teams=[team_preventers], ) hero_spider_boy = Hero( name="Spider-Boy", secret_name="Pedro Parqueador", teams=[team_preventers], ) session.add(hero_deadpond) session.add(hero_rusty_man) session.add(hero_spider_boy) session.commit()
session.refresh(hero_deadpond) session.refresh(hero_rusty_man) session.refresh(hero_spider_boy)
print("Deadpond:", hero_deadpond) print("Deadpond teams:", hero_deadpond.teams) print("Rusty-Man:", hero_rusty_man) print("Rusty-Man Teams:", hero_rusty_man.teams) print("Spider-Boy:", hero_spider_boy) print("Spider-Boy Teams:", hero_spider_boy.teams)
if __name__ == "__main__": test()
|