Skip to content

Commit 2f5af2e

Browse files
🎨 Auto format
1 parent a32a181 commit 2f5af2e

12 files changed

Lines changed: 224 additions & 240 deletions

File tree

docs_src/tutorial/fastapi/app_testing/tutorial001_py310/main.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from contextlib import asynccontextmanager
21
from fastapi import Depends, FastAPI, HTTPException, Query
32
from sqlmodel import Field, Session, SQLModel, create_engine, select
43

docs_src/tutorial/fastapi/delete/tutorial001_py310.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from contextlib import asynccontextmanager
21
from fastapi import FastAPI, HTTPException, Query
32
from sqlmodel import Field, Session, SQLModel, create_engine, select
43

docs_src/tutorial/fastapi/limit_and_offset/tutorial001_py310.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from contextlib import asynccontextmanager
21
from fastapi import FastAPI, HTTPException, Query
32
from sqlmodel import Field, Session, SQLModel, create_engine, select
43

docs_src/tutorial/fastapi/multiple_models/tutorial001_py310.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from contextlib import asynccontextmanager
21
from fastapi import FastAPI
32
from sqlmodel import Field, Session, SQLModel, create_engine, select
43

docs_src/tutorial/fastapi/multiple_models/tutorial002_py310.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from contextlib import asynccontextmanager
21
from fastapi import FastAPI
32
from sqlmodel import Field, Session, SQLModel, create_engine, select
43

docs_src/tutorial/fastapi/read_one/tutorial001_py310.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from contextlib import asynccontextmanager
21
from fastapi import FastAPI, HTTPException
32
from sqlmodel import Field, Session, SQLModel, create_engine, select
43

docs_src/tutorial/fastapi/relationships/tutorial001_py310.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from contextlib import asynccontextmanager
21
from fastapi import Depends, FastAPI, HTTPException, Query
32
from sqlmodel import Field, Relationship, Session, SQLModel, create_engine, select
43

docs_src/tutorial/fastapi/response_model/tutorial001_py310.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from contextlib import asynccontextmanager
21
from fastapi import FastAPI
32
from sqlmodel import Field, Session, SQLModel, create_engine, select
43

Lines changed: 15 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,14 @@
1-
from contextlib import asynccontextmanager
2-
from fastapi import Depends, FastAPI, HTTPException, Query
1+
from fastapi import FastAPI
32
from sqlmodel import Field, Session, SQLModel, create_engine, select
43

54

6-
class HeroBase(SQLModel):
5+
class Hero(SQLModel, table=True):
6+
id: int | None = Field(default=None, primary_key=True)
77
name: str = Field(index=True)
88
secret_name: str
99
age: int | None = Field(default=None, index=True)
1010

1111

12-
class Hero(HeroBase, table=True):
13-
id: int | None = Field(default=None, primary_key=True)
14-
15-
16-
class HeroCreate(HeroBase):
17-
pass
18-
19-
20-
class HeroPublic(HeroBase):
21-
id: int
22-
23-
24-
class HeroUpdate(SQLModel):
25-
name: str | None = None
26-
secret_name: str | None = None
27-
age: int | None = None
28-
29-
3012
sqlite_file_name = "database.db"
3113
sqlite_url = f"sqlite:///{sqlite_file_name}"
3214

@@ -38,11 +20,6 @@ def create_db_and_tables():
3820
SQLModel.metadata.create_all(engine)
3921

4022

41-
def get_session():
42-
with Session(engine) as session:
43-
yield session
44-
45-
4623
app = FastAPI()
4724

4825

@@ -51,54 +28,17 @@ def on_startup():
5128
create_db_and_tables()
5229

5330

54-
@app.post("/heroes/", response_model=HeroPublic)
55-
def create_hero(*, session: Session = Depends(get_session), hero: HeroCreate):
56-
db_hero = Hero.model_validate(hero)
57-
session.add(db_hero)
58-
session.commit()
59-
session.refresh(db_hero)
60-
return db_hero
61-
62-
63-
@app.get("/heroes/", response_model=list[HeroPublic])
64-
def read_heroes(
65-
*,
66-
session: Session = Depends(get_session),
67-
offset: int = 0,
68-
limit: int = Query(default=100, le=100),
69-
):
70-
heroes = session.exec(select(Hero).offset(offset).limit(limit)).all()
71-
return heroes
72-
73-
74-
@app.get("/heroes/{hero_id}", response_model=HeroPublic)
75-
def read_hero(*, session: Session = Depends(get_session), hero_id: int):
76-
hero = session.get(Hero, hero_id)
77-
if not hero:
78-
raise HTTPException(status_code=404, detail="Hero not found")
79-
return hero
80-
81-
82-
@app.patch("/heroes/{hero_id}", response_model=HeroPublic)
83-
def update_hero(
84-
*, session: Session = Depends(get_session), hero_id: int, hero: HeroUpdate
85-
):
86-
db_hero = session.get(Hero, hero_id)
87-
if not db_hero:
88-
raise HTTPException(status_code=404, detail="Hero not found")
89-
hero_data = hero.model_dump(exclude_unset=True)
90-
db_hero.sqlmodel_update(hero_data)
91-
session.add(db_hero)
92-
session.commit()
93-
session.refresh(db_hero)
94-
return db_hero
31+
@app.post("/heroes/")
32+
def create_hero(hero: Hero):
33+
with Session(engine) as session:
34+
session.add(hero)
35+
session.commit()
36+
session.refresh(hero)
37+
return hero
9538

9639

97-
@app.delete("/heroes/{hero_id}")
98-
def delete_hero(*, session: Session = Depends(get_session), hero_id: int):
99-
hero = session.get(Hero, hero_id)
100-
if not hero:
101-
raise HTTPException(status_code=404, detail="Hero not found")
102-
session.delete(hero)
103-
session.commit()
104-
return {"ok": True}
40+
@app.get("/heroes/")
41+
def read_heroes():
42+
with Session(engine) as session:
43+
heroes = session.exec(select(Hero)).all()
44+
return heroes
Lines changed: 159 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,59 @@
1-
from contextlib import asynccontextmanager
2-
from fastapi import FastAPI
3-
from sqlmodel import Field, Session, SQLModel, create_engine, select
1+
from fastapi import Depends, FastAPI, HTTPException, Query
2+
from sqlmodel import Field, Relationship, Session, SQLModel, create_engine, select
43

54

6-
class Hero(SQLModel, table=True):
5+
class TeamBase(SQLModel):
6+
name: str = Field(index=True)
7+
headquarters: str
8+
9+
10+
class Team(TeamBase, table=True):
711
id: int | None = Field(default=None, primary_key=True)
12+
13+
heroes: list["Hero"] = Relationship(back_populates="team")
14+
15+
16+
class TeamCreate(TeamBase):
17+
pass
18+
19+
20+
class TeamPublic(TeamBase):
21+
id: int
22+
23+
24+
class TeamUpdate(SQLModel):
25+
name: str | None = None
26+
headquarters: str | None = None
27+
28+
29+
class HeroBase(SQLModel):
830
name: str = Field(index=True)
931
secret_name: str
1032
age: int | None = Field(default=None, index=True)
1133

34+
team_id: int | None = Field(default=None, foreign_key="team.id")
35+
36+
37+
class Hero(HeroBase, table=True):
38+
id: int | None = Field(default=None, primary_key=True)
39+
40+
team: Team | None = Relationship(back_populates="heroes")
41+
42+
43+
class HeroPublic(HeroBase):
44+
id: int
45+
46+
47+
class HeroCreate(HeroBase):
48+
pass
49+
50+
51+
class HeroUpdate(SQLModel):
52+
name: str | None = None
53+
secret_name: str | None = None
54+
age: int | None = None
55+
team_id: int | None = None
56+
1257

1358
sqlite_file_name = "database.db"
1459
sqlite_url = f"sqlite:///{sqlite_file_name}"
@@ -21,6 +66,11 @@ def create_db_and_tables():
2166
SQLModel.metadata.create_all(engine)
2267

2368

69+
def get_session():
70+
with Session(engine) as session:
71+
yield session
72+
73+
2474
app = FastAPI()
2575

2676

@@ -29,17 +79,110 @@ def on_startup():
2979
create_db_and_tables()
3080

3181

32-
@app.post("/heroes/")
33-
def create_hero(hero: Hero):
34-
with Session(engine) as session:
35-
session.add(hero)
36-
session.commit()
37-
session.refresh(hero)
38-
return hero
82+
@app.post("/heroes/", response_model=HeroPublic)
83+
def create_hero(*, session: Session = Depends(get_session), hero: HeroCreate):
84+
db_hero = Hero.model_validate(hero)
85+
session.add(db_hero)
86+
session.commit()
87+
session.refresh(db_hero)
88+
return db_hero
3989

4090

41-
@app.get("/heroes/")
42-
def read_heroes():
43-
with Session(engine) as session:
44-
heroes = session.exec(select(Hero)).all()
45-
return heroes
91+
@app.get("/heroes/", response_model=list[HeroPublic])
92+
def read_heroes(
93+
*,
94+
session: Session = Depends(get_session),
95+
offset: int = 0,
96+
limit: int = Query(default=100, le=100),
97+
):
98+
heroes = session.exec(select(Hero).offset(offset).limit(limit)).all()
99+
return heroes
100+
101+
102+
@app.get("/heroes/{hero_id}", response_model=HeroPublic)
103+
def read_hero(*, session: Session = Depends(get_session), hero_id: int):
104+
hero = session.get(Hero, hero_id)
105+
if not hero:
106+
raise HTTPException(status_code=404, detail="Hero not found")
107+
return hero
108+
109+
110+
@app.patch("/heroes/{hero_id}", response_model=HeroPublic)
111+
def update_hero(
112+
*, session: Session = Depends(get_session), hero_id: int, hero: HeroUpdate
113+
):
114+
db_hero = session.get(Hero, hero_id)
115+
if not db_hero:
116+
raise HTTPException(status_code=404, detail="Hero not found")
117+
hero_data = hero.model_dump(exclude_unset=True)
118+
db_hero.sqlmodel_update(hero_data)
119+
session.add(db_hero)
120+
session.commit()
121+
session.refresh(db_hero)
122+
return db_hero
123+
124+
125+
@app.delete("/heroes/{hero_id}")
126+
def delete_hero(*, session: Session = Depends(get_session), hero_id: int):
127+
hero = session.get(Hero, hero_id)
128+
if not hero:
129+
raise HTTPException(status_code=404, detail="Hero not found")
130+
session.delete(hero)
131+
session.commit()
132+
return {"ok": True}
133+
134+
135+
@app.post("/teams/", response_model=TeamPublic)
136+
def create_team(*, session: Session = Depends(get_session), team: TeamCreate):
137+
db_team = Team.model_validate(team)
138+
session.add(db_team)
139+
session.commit()
140+
session.refresh(db_team)
141+
return db_team
142+
143+
144+
@app.get("/teams/", response_model=list[TeamPublic])
145+
def read_teams(
146+
*,
147+
session: Session = Depends(get_session),
148+
offset: int = 0,
149+
limit: int = Query(default=100, le=100),
150+
):
151+
teams = session.exec(select(Team).offset(offset).limit(limit)).all()
152+
return teams
153+
154+
155+
@app.get("/teams/{team_id}", response_model=TeamPublic)
156+
def read_team(*, team_id: int, session: Session = Depends(get_session)):
157+
team = session.get(Team, team_id)
158+
if not team:
159+
raise HTTPException(status_code=404, detail="Team not found")
160+
return team
161+
162+
163+
@app.patch("/teams/{team_id}", response_model=TeamPublic)
164+
def update_team(
165+
*,
166+
session: Session = Depends(get_session),
167+
team_id: int,
168+
team: TeamUpdate,
169+
):
170+
db_team = session.get(Team, team_id)
171+
if not db_team:
172+
raise HTTPException(status_code=404, detail="Team not found")
173+
team_data = team.model_dump(exclude_unset=True)
174+
db_team.sqlmodel_update(team_data)
175+
session.add(db_team)
176+
session.commit()
177+
session.refresh(db_team)
178+
return db_team
179+
180+
181+
@app.delete("/teams/{team_id}")
182+
def delete_team(*, session: Session = Depends(get_session), team_id: int):
183+
team = session.get(Team, team_id)
184+
if not team:
185+
raise HTTPException(status_code=404, detail="Team not found")
186+
session.delete(team)
187+
session.commit()
188+
return {"ok": True}

0 commit comments

Comments
 (0)