From: Yurii Motov Date: Wed, 24 Dec 2025 21:42:24 +0000 (+0100) Subject: Update `docs_src/tutorial/many_to_many` X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=45a627be7e2e5f04fe3113486d0478edc20e8371;p=thirdparty%2Ffastapi%2Fsqlmodel.git Update `docs_src/tutorial/many_to_many` --- diff --git a/docs_src/tutorial/many_to_many/tutorial001.py b/docs_src/tutorial/many_to_many/tutorial001.py deleted file mode 100644 index 79f9e790..00000000 --- a/docs_src/tutorial/many_to_many/tutorial001.py +++ /dev/null @@ -1,84 +0,0 @@ -from typing import List, Optional - -from sqlmodel import Field, Relationship, Session, SQLModel, create_engine - - -class HeroTeamLink(SQLModel, table=True): - team_id: Optional[int] = Field( - default=None, foreign_key="team.id", primary_key=True - ) - hero_id: Optional[int] = Field( - default=None, foreign_key="hero.id", primary_key=True - ) - - -class Team(SQLModel, table=True): - id: Optional[int] = 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: Optional[int] = Field(default=None, primary_key=True) - name: str = Field(index=True) - secret_name: str - age: Optional[int] = Field(default=None, index=True) - - teams: List[Team] = Relationship(back_populates="heroes", link_model=HeroTeamLink) - - -sqlite_file_name = "database.db" -sqlite_url = f"sqlite:///{sqlite_file_name}" - -engine = create_engine(sqlite_url, echo=True) - - -def create_db_and_tables(): - SQLModel.metadata.create_all(engine) - - -def create_heroes(): - 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) - - -def main(): - create_db_and_tables() - create_heroes() - - -if __name__ == "__main__": - main() diff --git a/docs_src/tutorial/many_to_many/tutorial002.py b/docs_src/tutorial/many_to_many/tutorial002.py deleted file mode 100644 index 9845340e..00000000 --- a/docs_src/tutorial/many_to_many/tutorial002.py +++ /dev/null @@ -1,107 +0,0 @@ -from typing import List, Optional - -from sqlmodel import Field, Relationship, Session, SQLModel, create_engine, select - - -class HeroTeamLink(SQLModel, table=True): - team_id: Optional[int] = Field( - default=None, foreign_key="team.id", primary_key=True - ) - hero_id: Optional[int] = Field( - default=None, foreign_key="hero.id", primary_key=True - ) - - -class Team(SQLModel, table=True): - id: Optional[int] = 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: Optional[int] = Field(default=None, primary_key=True) - name: str = Field(index=True) - secret_name: str - age: Optional[int] = Field(default=None, index=True) - - teams: List[Team] = Relationship(back_populates="heroes", link_model=HeroTeamLink) - - -sqlite_file_name = "database.db" -sqlite_url = f"sqlite:///{sqlite_file_name}" - -engine = create_engine(sqlite_url, echo=True) - - -def create_db_and_tables(): - SQLModel.metadata.create_all(engine) - - -def create_heroes(): - 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) - - -def update_heroes(): - with Session(engine) as session: - hero_spider_boy = session.exec( - select(Hero).where(Hero.name == "Spider-Boy") - ).one() - team_z_force = session.exec(select(Team).where(Team.name == "Z-Force")).one() - - team_z_force.heroes.append(hero_spider_boy) - session.add(team_z_force) - session.commit() - - print("Updated Spider-Boy's Teams:", hero_spider_boy.teams) - print("Z-Force heroes:", team_z_force.heroes) - - hero_spider_boy.teams.remove(team_z_force) - session.add(team_z_force) - session.commit() - - print("Reverted Z-Force's heroes:", team_z_force.heroes) - print("Reverted Spider-Boy's teams:", hero_spider_boy.teams) - - -def main(): - create_db_and_tables() - create_heroes() - update_heroes() - - -if __name__ == "__main__": - main() diff --git a/docs_src/tutorial/many_to_many/tutorial003.py b/docs_src/tutorial/many_to_many/tutorial003.py deleted file mode 100644 index 6c23878b..00000000 --- a/docs_src/tutorial/many_to_many/tutorial003.py +++ /dev/null @@ -1,123 +0,0 @@ -from typing import List, Optional - -from sqlmodel import Field, Relationship, Session, SQLModel, create_engine, select - - -class HeroTeamLink(SQLModel, table=True): - team_id: Optional[int] = Field( - default=None, foreign_key="team.id", primary_key=True - ) - hero_id: Optional[int] = Field( - default=None, foreign_key="hero.id", primary_key=True - ) - is_training: bool = False - - team: "Team" = Relationship(back_populates="hero_links") - hero: "Hero" = Relationship(back_populates="team_links") - - -class Team(SQLModel, table=True): - id: Optional[int] = Field(default=None, primary_key=True) - name: str = Field(index=True) - headquarters: str - - hero_links: List[HeroTeamLink] = Relationship(back_populates="team") - - -class Hero(SQLModel, table=True): - id: Optional[int] = Field(default=None, primary_key=True) - name: str = Field(index=True) - secret_name: str - age: Optional[int] = Field(default=None, index=True) - - team_links: List[HeroTeamLink] = Relationship(back_populates="hero") - - -sqlite_file_name = "database.db" -sqlite_url = f"sqlite:///{sqlite_file_name}" - -engine = create_engine(sqlite_url, echo=True) - - -def create_db_and_tables(): - SQLModel.metadata.create_all(engine) - - -def create_heroes(): - 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", - ) - hero_rusty_man = Hero( - name="Rusty-Man", - secret_name="Tommy Sharp", - age=48, - ) - hero_spider_boy = Hero( - name="Spider-Boy", - secret_name="Pedro Parqueador", - ) - deadpond_team_z_link = HeroTeamLink(team=team_z_force, hero=hero_deadpond) - deadpond_preventers_link = HeroTeamLink( - team=team_preventers, hero=hero_deadpond, is_training=True - ) - spider_boy_preventers_link = HeroTeamLink( - team=team_preventers, hero=hero_spider_boy, is_training=True - ) - rusty_man_preventers_link = HeroTeamLink( - team=team_preventers, hero=hero_rusty_man - ) - - session.add(deadpond_team_z_link) - session.add(deadpond_preventers_link) - session.add(spider_boy_preventers_link) - session.add(rusty_man_preventers_link) - session.commit() - - for link in team_z_force.hero_links: - print("Z-Force hero:", link.hero, "is training:", link.is_training) - - for link in team_preventers.hero_links: - print("Preventers hero:", link.hero, "is training:", link.is_training) - - -def update_heroes(): - with Session(engine) as session: - hero_spider_boy = session.exec( - select(Hero).where(Hero.name == "Spider-Boy") - ).one() - team_z_force = session.exec(select(Team).where(Team.name == "Z-Force")).one() - - spider_boy_z_force_link = HeroTeamLink( - team=team_z_force, hero=hero_spider_boy, is_training=True - ) - team_z_force.hero_links.append(spider_boy_z_force_link) - session.add(team_z_force) - session.commit() - - print("Updated Spider-Boy's Teams:", hero_spider_boy.team_links) - print("Z-Force heroes:", team_z_force.hero_links) - - for link in hero_spider_boy.team_links: - if link.team.name == "Preventers": - link.is_training = False - - session.add(hero_spider_boy) - session.commit() - - for link in hero_spider_boy.team_links: - print("Spider-Boy team:", link.team, "is training:", link.is_training) - - -def main(): - create_db_and_tables() - create_heroes() - update_heroes() - - -if __name__ == "__main__": - main() diff --git a/tests/test_tutorial/test_many_to_many/test_tutorial001.py b/tests/test_tutorial/test_many_to_many/test_tutorial001.py index b84626d9..427fe418 100644 --- a/tests/test_tutorial/test_many_to_many/test_tutorial001.py +++ b/tests/test_tutorial/test_many_to_many/test_tutorial001.py @@ -4,14 +4,13 @@ from types import ModuleType import pytest from sqlmodel import create_engine -from ...conftest import PrintMock, needs_py39, needs_py310 +from ...conftest import PrintMock, needs_py310 @pytest.fixture( name="mod", params=[ - "tutorial001", - pytest.param("tutorial001_py39", marks=needs_py39), + pytest.param("tutorial001_py39"), pytest.param("tutorial001_py310", marks=needs_py310), ], ) diff --git a/tests/test_tutorial/test_many_to_many/test_tutorial002.py b/tests/test_tutorial/test_many_to_many/test_tutorial002.py index b5562f41..7ac120d5 100644 --- a/tests/test_tutorial/test_many_to_many/test_tutorial002.py +++ b/tests/test_tutorial/test_many_to_many/test_tutorial002.py @@ -4,14 +4,13 @@ from types import ModuleType import pytest from sqlmodel import create_engine -from ...conftest import PrintMock, needs_py39, needs_py310 +from ...conftest import PrintMock, needs_py310 @pytest.fixture( name="mod", params=[ - "tutorial002", - pytest.param("tutorial002_py39", marks=needs_py39), + pytest.param("tutorial002_py39"), pytest.param("tutorial002_py310", marks=needs_py310), ], ) diff --git a/tests/test_tutorial/test_many_to_many/test_tutorial003.py b/tests/test_tutorial/test_many_to_many/test_tutorial003.py index ad1168e3..6c14445b 100644 --- a/tests/test_tutorial/test_many_to_many/test_tutorial003.py +++ b/tests/test_tutorial/test_many_to_many/test_tutorial003.py @@ -4,14 +4,13 @@ from types import ModuleType import pytest from sqlmodel import create_engine -from ...conftest import PrintMock, needs_py39, needs_py310 +from ...conftest import PrintMock, needs_py310 @pytest.fixture( name="mod", params=[ - "tutorial003", - pytest.param("tutorial003_py39", marks=needs_py39), + pytest.param("tutorial003_py39"), pytest.param("tutorial003_py310", marks=needs_py310), ], )