Skip to content
59 changes: 59 additions & 0 deletions docs_src/advanced/decimal/tutorial001_py310.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
from pydantic import condecimal
from sqlmodel import Field, Session, SQLModel, create_engine, select


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)
money: condecimal(max_digits=5, decimal_places=3) = Field(default=0)


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():
hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson", money=1.1)
hero_2 = Hero(name="Spider-Boy", secret_name="Pedro Parqueador", money=0.001)
hero_3 = Hero(name="Rusty-Man", secret_name="Tommy Sharp", age=48, money=2.2)

with Session(engine) as session:
session.add(hero_1)
session.add(hero_2)
session.add(hero_3)

session.commit()


def select_heroes():
with Session(engine) as session:
statement = select(Hero).where(Hero.name == "Deadpond")
results = session.exec(statement)
hero_1 = results.one()
print("Hero 1:", hero_1)

statement = select(Hero).where(Hero.name == "Rusty-Man")
results = session.exec(statement)
hero_2 = results.one()
print("Hero 2:", hero_2)

total_money = hero_1.money + hero_2.money
print(f"Total money: {total_money}")


def main():
create_db_and_tables()
create_heroes()
select_heroes()


if __name__ == "__main__":
main()
79 changes: 79 additions & 0 deletions docs_src/tutorial/automatic_id_none_refresh/tutorial001_py310.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
from sqlmodel import Field, Session, SQLModel, create_engine


class Hero(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True)
name: str
secret_name: str
age: int | None = None


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():
hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson")
hero_2 = Hero(name="Spider-Boy", secret_name="Pedro Parqueador")
hero_3 = Hero(name="Rusty-Man", secret_name="Tommy Sharp", age=48)

print("Before interacting with the database")
print("Hero 1:", hero_1)
print("Hero 2:", hero_2)
print("Hero 3:", hero_3)

with Session(engine) as session:
session.add(hero_1)
session.add(hero_2)
session.add(hero_3)

print("After adding to the session")
print("Hero 1:", hero_1)
print("Hero 2:", hero_2)
print("Hero 3:", hero_3)

session.commit()

print("After committing the session")
print("Hero 1:", hero_1)
print("Hero 2:", hero_2)
print("Hero 3:", hero_3)

print("After committing the session, show IDs")
print("Hero 1 ID:", hero_1.id)
print("Hero 2 ID:", hero_2.id)
print("Hero 3 ID:", hero_3.id)

print("After committing the session, show names")
print("Hero 1 name:", hero_1.name)
print("Hero 2 name:", hero_2.name)
print("Hero 3 name:", hero_3.name)

session.refresh(hero_1)
session.refresh(hero_2)
session.refresh(hero_3)

print("After refreshing the heroes")
print("Hero 1:", hero_1)
print("Hero 2:", hero_2)
print("Hero 3:", hero_3)

print("After the session closes")
print("Hero 1:", hero_1)
print("Hero 2:", hero_2)
print("Hero 3:", hero_3)


def main():
create_db_and_tables()
create_heroes()


if __name__ == "__main__":
main()
80 changes: 80 additions & 0 deletions docs_src/tutorial/automatic_id_none_refresh/tutorial002_py310.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
from sqlmodel import Field, Session, SQLModel, create_engine


class Hero(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True)
name: str
secret_name: str
age: int | None = None


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():
hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson") # (1)!
hero_2 = Hero(name="Spider-Boy", secret_name="Pedro Parqueador") # (2)!
hero_3 = Hero(name="Rusty-Man", secret_name="Tommy Sharp", age=48) # (3)!

print("Before interacting with the database") # (4)!
print("Hero 1:", hero_1) # (5)!
print("Hero 2:", hero_2) # (6)!
print("Hero 3:", hero_3) # (7)!

with Session(engine) as session: # (8)!
session.add(hero_1) # (9)!
session.add(hero_2) # (10)!
session.add(hero_3) # (11)!

print("After adding to the session") # (12)!
print("Hero 1:", hero_1) # (13)!
print("Hero 2:", hero_2) # (14)!
print("Hero 3:", hero_3) # (15)!

session.commit() # (16)!

print("After committing the session") # (17)!
print("Hero 1:", hero_1) # (18)!
print("Hero 2:", hero_2) # (19)!
print("Hero 3:", hero_3) # (20)!

print("After committing the session, show IDs") # (21)!
print("Hero 1 ID:", hero_1.id) # (22)!
print("Hero 2 ID:", hero_2.id) # (23)!
print("Hero 3 ID:", hero_3.id) # (24)!

print("After committing the session, show names") # (25)!
print("Hero 1 name:", hero_1.name) # (26)!
print("Hero 2 name:", hero_2.name) # (27)!
print("Hero 3 name:", hero_3.name) # (28)!

session.refresh(hero_1) # (29)!
session.refresh(hero_2) # (30)!
session.refresh(hero_3) # (31)!

print("After refreshing the heroes") # (32)!
print("Hero 1:", hero_1) # (33)!
print("Hero 2:", hero_2) # (34)!
print("Hero 3:", hero_3) # (35)!
# (36)!

print("After the session closes") # (37)!
print("Hero 1:", hero_1) # (38)!
print("Hero 2:", hero_2) # (39)!
print("Hero 3:", hero_3) # (40)!


def main():
create_db_and_tables()
create_heroes()


if __name__ == "__main__":
main()
Empty file.
29 changes: 29 additions & 0 deletions docs_src/tutorial/code_structure/tutorial001_py310/app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from sqlmodel import Session

from .database import create_db_and_tables, engine
from .models import Hero, Team


def create_heroes():
with Session(engine) as session:
team_z_force = Team(name="Z-Force", headquarters="Sister Margaret’s Bar")

hero_deadpond = Hero(
name="Deadpond", secret_name="Dive Wilson", team=team_z_force
)
session.add(hero_deadpond)
session.commit()

session.refresh(hero_deadpond)

print("Created hero:", hero_deadpond)
print("Hero's team:", hero_deadpond.team)


def main():
create_db_and_tables()
create_heroes()


if __name__ == "__main__":
main()
10 changes: 10 additions & 0 deletions docs_src/tutorial/code_structure/tutorial001_py310/database.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from sqlmodel import SQLModel, create_engine

sqlite_file_name = "database.db"
sqlite_url = f"sqlite:///{sqlite_file_name}"

engine = create_engine(sqlite_url)


def create_db_and_tables():
SQLModel.metadata.create_all(engine)
19 changes: 19 additions & 0 deletions docs_src/tutorial/code_structure/tutorial001_py310/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from sqlmodel import Field, Relationship, SQLModel


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="team")


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)

team_id: int | None = Field(default=None, foreign_key="team.id")
team: Team | None = Relationship(back_populates="heroes")
Empty file.
29 changes: 29 additions & 0 deletions docs_src/tutorial/code_structure/tutorial001_py39/app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from sqlmodel import Session

from .database import create_db_and_tables, engine
from .models import Hero, Team


def create_heroes():
with Session(engine) as session:
team_z_force = Team(name="Z-Force", headquarters="Sister Margaret’s Bar")

hero_deadpond = Hero(
name="Deadpond", secret_name="Dive Wilson", team=team_z_force
)
session.add(hero_deadpond)
session.commit()

session.refresh(hero_deadpond)

print("Created hero:", hero_deadpond)
print("Hero's team:", hero_deadpond.team)


def main():
create_db_and_tables()
create_heroes()


if __name__ == "__main__":
main()
10 changes: 10 additions & 0 deletions docs_src/tutorial/code_structure/tutorial001_py39/database.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from sqlmodel import SQLModel, create_engine

sqlite_file_name = "database.db"
sqlite_url = f"sqlite:///{sqlite_file_name}"

engine = create_engine(sqlite_url)


def create_db_and_tables():
SQLModel.metadata.create_all(engine)
21 changes: 21 additions & 0 deletions docs_src/tutorial/code_structure/tutorial001_py39/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from typing import Optional

from sqlmodel import Field, Relationship, SQLModel


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="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_id: Optional[int] = Field(default=None, foreign_key="team.id")
team: Optional[Team] = Relationship(back_populates="heroes")
Empty file.
30 changes: 30 additions & 0 deletions docs_src/tutorial/code_structure/tutorial002_py310/app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from sqlmodel import Session

from .database import create_db_and_tables, engine
from .hero_model import Hero
from .team_model import Team


def create_heroes():
with Session(engine) as session:
team_z_force = Team(name="Z-Force", headquarters="Sister Margaret’s Bar")

hero_deadpond = Hero(
name="Deadpond", secret_name="Dive Wilson", team=team_z_force
)
session.add(hero_deadpond)
session.commit()

session.refresh(hero_deadpond)

print("Created hero:", hero_deadpond)
print("Hero's team:", hero_deadpond.team)


def main():
create_db_and_tables()
create_heroes()


if __name__ == "__main__":
main()
10 changes: 10 additions & 0 deletions docs_src/tutorial/code_structure/tutorial002_py310/database.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from sqlmodel import SQLModel, create_engine

sqlite_file_name = "database.db"
sqlite_url = f"sqlite:///{sqlite_file_name}"

engine = create_engine(sqlite_url)


def create_db_and_tables():
SQLModel.metadata.create_all(engine)
Loading