Skip to content

Commit d8effcb

Browse files
authored
📝 Add source examples for Python 3.9 and 3.10 (fastapi#715)
* 📝 Add source examples for Python 3.9 and 3.10 * ✅ Add tests for new source examples for Python 3.9 and 3.10, still needs pytest markers * ✅ Add tests for fastapi examples * ✅ Update tests for FastAPI app testing, for Python 3.9 and 3.10, fixing multi-app testing conflicts * ✅ Require Python 3.9 and 3.10 for tests * ✅ Update tests with missing markers
1 parent cce30d7 commit d8effcb

File tree

243 files changed

+20060
-83
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

243 files changed

+20060
-83
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
from pydantic import condecimal
2+
from sqlmodel import Field, Session, SQLModel, create_engine, select
3+
4+
5+
class Hero(SQLModel, table=True):
6+
id: int | None = Field(default=None, primary_key=True)
7+
name: str = Field(index=True)
8+
secret_name: str
9+
age: int | None = Field(default=None, index=True)
10+
money: condecimal(max_digits=5, decimal_places=3) = Field(default=0)
11+
12+
13+
sqlite_file_name = "database.db"
14+
sqlite_url = f"sqlite:///{sqlite_file_name}"
15+
16+
engine = create_engine(sqlite_url, echo=True)
17+
18+
19+
def create_db_and_tables():
20+
SQLModel.metadata.create_all(engine)
21+
22+
23+
def create_heroes():
24+
hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson", money=1.1)
25+
hero_2 = Hero(name="Spider-Boy", secret_name="Pedro Parqueador", money=0.001)
26+
hero_3 = Hero(name="Rusty-Man", secret_name="Tommy Sharp", age=48, money=2.2)
27+
28+
with Session(engine) as session:
29+
session.add(hero_1)
30+
session.add(hero_2)
31+
session.add(hero_3)
32+
33+
session.commit()
34+
35+
36+
def select_heroes():
37+
with Session(engine) as session:
38+
statement = select(Hero).where(Hero.name == "Deadpond")
39+
results = session.exec(statement)
40+
hero_1 = results.one()
41+
print("Hero 1:", hero_1)
42+
43+
statement = select(Hero).where(Hero.name == "Rusty-Man")
44+
results = session.exec(statement)
45+
hero_2 = results.one()
46+
print("Hero 2:", hero_2)
47+
48+
total_money = hero_1.money + hero_2.money
49+
print(f"Total money: {total_money}")
50+
51+
52+
def main():
53+
create_db_and_tables()
54+
create_heroes()
55+
select_heroes()
56+
57+
58+
if __name__ == "__main__":
59+
main()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
from sqlmodel import Field, Session, SQLModel, create_engine
2+
3+
4+
class Hero(SQLModel, table=True):
5+
id: int | None = Field(default=None, primary_key=True)
6+
name: str
7+
secret_name: str
8+
age: int | None = None
9+
10+
11+
sqlite_file_name = "database.db"
12+
sqlite_url = f"sqlite:///{sqlite_file_name}"
13+
14+
engine = create_engine(sqlite_url, echo=True)
15+
16+
17+
def create_db_and_tables():
18+
SQLModel.metadata.create_all(engine)
19+
20+
21+
def create_heroes():
22+
hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson")
23+
hero_2 = Hero(name="Spider-Boy", secret_name="Pedro Parqueador")
24+
hero_3 = Hero(name="Rusty-Man", secret_name="Tommy Sharp", age=48)
25+
26+
print("Before interacting with the database")
27+
print("Hero 1:", hero_1)
28+
print("Hero 2:", hero_2)
29+
print("Hero 3:", hero_3)
30+
31+
with Session(engine) as session:
32+
session.add(hero_1)
33+
session.add(hero_2)
34+
session.add(hero_3)
35+
36+
print("After adding to the session")
37+
print("Hero 1:", hero_1)
38+
print("Hero 2:", hero_2)
39+
print("Hero 3:", hero_3)
40+
41+
session.commit()
42+
43+
print("After committing the session")
44+
print("Hero 1:", hero_1)
45+
print("Hero 2:", hero_2)
46+
print("Hero 3:", hero_3)
47+
48+
print("After committing the session, show IDs")
49+
print("Hero 1 ID:", hero_1.id)
50+
print("Hero 2 ID:", hero_2.id)
51+
print("Hero 3 ID:", hero_3.id)
52+
53+
print("After committing the session, show names")
54+
print("Hero 1 name:", hero_1.name)
55+
print("Hero 2 name:", hero_2.name)
56+
print("Hero 3 name:", hero_3.name)
57+
58+
session.refresh(hero_1)
59+
session.refresh(hero_2)
60+
session.refresh(hero_3)
61+
62+
print("After refreshing the heroes")
63+
print("Hero 1:", hero_1)
64+
print("Hero 2:", hero_2)
65+
print("Hero 3:", hero_3)
66+
67+
print("After the session closes")
68+
print("Hero 1:", hero_1)
69+
print("Hero 2:", hero_2)
70+
print("Hero 3:", hero_3)
71+
72+
73+
def main():
74+
create_db_and_tables()
75+
create_heroes()
76+
77+
78+
if __name__ == "__main__":
79+
main()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
from sqlmodel import Field, Session, SQLModel, create_engine
2+
3+
4+
class Hero(SQLModel, table=True):
5+
id: int | None = Field(default=None, primary_key=True)
6+
name: str
7+
secret_name: str
8+
age: int | None = None
9+
10+
11+
sqlite_file_name = "database.db"
12+
sqlite_url = f"sqlite:///{sqlite_file_name}"
13+
14+
engine = create_engine(sqlite_url, echo=True)
15+
16+
17+
def create_db_and_tables():
18+
SQLModel.metadata.create_all(engine)
19+
20+
21+
def create_heroes():
22+
hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson") # (1)!
23+
hero_2 = Hero(name="Spider-Boy", secret_name="Pedro Parqueador") # (2)!
24+
hero_3 = Hero(name="Rusty-Man", secret_name="Tommy Sharp", age=48) # (3)!
25+
26+
print("Before interacting with the database") # (4)!
27+
print("Hero 1:", hero_1) # (5)!
28+
print("Hero 2:", hero_2) # (6)!
29+
print("Hero 3:", hero_3) # (7)!
30+
31+
with Session(engine) as session: # (8)!
32+
session.add(hero_1) # (9)!
33+
session.add(hero_2) # (10)!
34+
session.add(hero_3) # (11)!
35+
36+
print("After adding to the session") # (12)!
37+
print("Hero 1:", hero_1) # (13)!
38+
print("Hero 2:", hero_2) # (14)!
39+
print("Hero 3:", hero_3) # (15)!
40+
41+
session.commit() # (16)!
42+
43+
print("After committing the session") # (17)!
44+
print("Hero 1:", hero_1) # (18)!
45+
print("Hero 2:", hero_2) # (19)!
46+
print("Hero 3:", hero_3) # (20)!
47+
48+
print("After committing the session, show IDs") # (21)!
49+
print("Hero 1 ID:", hero_1.id) # (22)!
50+
print("Hero 2 ID:", hero_2.id) # (23)!
51+
print("Hero 3 ID:", hero_3.id) # (24)!
52+
53+
print("After committing the session, show names") # (25)!
54+
print("Hero 1 name:", hero_1.name) # (26)!
55+
print("Hero 2 name:", hero_2.name) # (27)!
56+
print("Hero 3 name:", hero_3.name) # (28)!
57+
58+
session.refresh(hero_1) # (29)!
59+
session.refresh(hero_2) # (30)!
60+
session.refresh(hero_3) # (31)!
61+
62+
print("After refreshing the heroes") # (32)!
63+
print("Hero 1:", hero_1) # (33)!
64+
print("Hero 2:", hero_2) # (34)!
65+
print("Hero 3:", hero_3) # (35)!
66+
# (36)!
67+
68+
print("After the session closes") # (37)!
69+
print("Hero 1:", hero_1) # (38)!
70+
print("Hero 2:", hero_2) # (39)!
71+
print("Hero 3:", hero_3) # (40)!
72+
73+
74+
def main():
75+
create_db_and_tables()
76+
create_heroes()
77+
78+
79+
if __name__ == "__main__":
80+
main()

docs_src/tutorial/code_structure/tutorial001_py310/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from sqlmodel import Session
2+
3+
from .database import create_db_and_tables, engine
4+
from .models import Hero, Team
5+
6+
7+
def create_heroes():
8+
with Session(engine) as session:
9+
team_z_force = Team(name="Z-Force", headquarters="Sister Margaret’s Bar")
10+
11+
hero_deadpond = Hero(
12+
name="Deadpond", secret_name="Dive Wilson", team=team_z_force
13+
)
14+
session.add(hero_deadpond)
15+
session.commit()
16+
17+
session.refresh(hero_deadpond)
18+
19+
print("Created hero:", hero_deadpond)
20+
print("Hero's team:", hero_deadpond.team)
21+
22+
23+
def main():
24+
create_db_and_tables()
25+
create_heroes()
26+
27+
28+
if __name__ == "__main__":
29+
main()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from sqlmodel import SQLModel, create_engine
2+
3+
sqlite_file_name = "database.db"
4+
sqlite_url = f"sqlite:///{sqlite_file_name}"
5+
6+
engine = create_engine(sqlite_url)
7+
8+
9+
def create_db_and_tables():
10+
SQLModel.metadata.create_all(engine)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from sqlmodel import Field, Relationship, SQLModel
2+
3+
4+
class Team(SQLModel, table=True):
5+
id: int | None = Field(default=None, primary_key=True)
6+
name: str = Field(index=True)
7+
headquarters: str
8+
9+
heroes: list["Hero"] = Relationship(back_populates="team")
10+
11+
12+
class Hero(SQLModel, table=True):
13+
id: int | None = Field(default=None, primary_key=True)
14+
name: str = Field(index=True)
15+
secret_name: str
16+
age: int | None = Field(default=None, index=True)
17+
18+
team_id: int | None = Field(default=None, foreign_key="team.id")
19+
team: Team | None = Relationship(back_populates="heroes")

docs_src/tutorial/code_structure/tutorial001_py39/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from sqlmodel import Session
2+
3+
from .database import create_db_and_tables, engine
4+
from .models import Hero, Team
5+
6+
7+
def create_heroes():
8+
with Session(engine) as session:
9+
team_z_force = Team(name="Z-Force", headquarters="Sister Margaret’s Bar")
10+
11+
hero_deadpond = Hero(
12+
name="Deadpond", secret_name="Dive Wilson", team=team_z_force
13+
)
14+
session.add(hero_deadpond)
15+
session.commit()
16+
17+
session.refresh(hero_deadpond)
18+
19+
print("Created hero:", hero_deadpond)
20+
print("Hero's team:", hero_deadpond.team)
21+
22+
23+
def main():
24+
create_db_and_tables()
25+
create_heroes()
26+
27+
28+
if __name__ == "__main__":
29+
main()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from sqlmodel import SQLModel, create_engine
2+
3+
sqlite_file_name = "database.db"
4+
sqlite_url = f"sqlite:///{sqlite_file_name}"
5+
6+
engine = create_engine(sqlite_url)
7+
8+
9+
def create_db_and_tables():
10+
SQLModel.metadata.create_all(engine)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from typing import Optional
2+
3+
from sqlmodel import Field, Relationship, SQLModel
4+
5+
6+
class Team(SQLModel, table=True):
7+
id: Optional[int] = Field(default=None, primary_key=True)
8+
name: str = Field(index=True)
9+
headquarters: str
10+
11+
heroes: list["Hero"] = Relationship(back_populates="team")
12+
13+
14+
class Hero(SQLModel, table=True):
15+
id: Optional[int] = Field(default=None, primary_key=True)
16+
name: str = Field(index=True)
17+
secret_name: str
18+
age: Optional[int] = Field(default=None, index=True)
19+
20+
team_id: Optional[int] = Field(default=None, foreign_key="team.id")
21+
team: Optional[Team] = Relationship(back_populates="heroes")

docs_src/tutorial/code_structure/tutorial002_py310/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from sqlmodel import Session
2+
3+
from .database import create_db_and_tables, engine
4+
from .hero_model import Hero
5+
from .team_model import Team
6+
7+
8+
def create_heroes():
9+
with Session(engine) as session:
10+
team_z_force = Team(name="Z-Force", headquarters="Sister Margaret’s Bar")
11+
12+
hero_deadpond = Hero(
13+
name="Deadpond", secret_name="Dive Wilson", team=team_z_force
14+
)
15+
session.add(hero_deadpond)
16+
session.commit()
17+
18+
session.refresh(hero_deadpond)
19+
20+
print("Created hero:", hero_deadpond)
21+
print("Hero's team:", hero_deadpond.team)
22+
23+
24+
def main():
25+
create_db_and_tables()
26+
create_heroes()
27+
28+
29+
if __name__ == "__main__":
30+
main()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from sqlmodel import SQLModel, create_engine
2+
3+
sqlite_file_name = "database.db"
4+
sqlite_url = f"sqlite:///{sqlite_file_name}"
5+
6+
engine = create_engine(sqlite_url)
7+
8+
9+
def create_db_and_tables():
10+
SQLModel.metadata.create_all(engine)

0 commit comments

Comments
 (0)