Coverage for tests / test_future_annotations.py: 100%
46 statements
« prev ^ index » next coverage.py v7.13.0, created at 2026-06-10 09:40 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2026-06-10 09:40 +0000
1from __future__ import annotations 1qrstuvwx
3from typing import Annotated 1qrstuvwx
5from sqlmodel import Field, Session, SQLModel, create_engine, select 1qrstuvwx
8def test_model_with_future_annotations(clear_sqlmodel): 1qrstuvwx
9 class Hero(SQLModel, table=True): 1ijklmnop
10 id: Annotated[int | None, Field(primary_key=True)] = None 1ijklmnop
11 name: str 1ijklmnop
12 secret_name: str 1ijklmnop
13 age: int | None = None 1ijklmnop
15 hero = Hero(name="Deadpond", secret_name="Dive Wilson", age=25) 1ijklmnop
17 engine = create_engine("sqlite://") 1ijklmnop
18 SQLModel.metadata.create_all(engine) 1ijklmnop
20 with Session(engine) as session: 1ijklmnop
21 session.add(hero) 1ijklmnop
22 session.commit() 1ijklmnop
23 session.refresh(hero) 1ijklmnop
25 assert hero.id is not None 1ijklmnop
26 assert hero.name == "Deadpond" 1ijklmnop
27 assert hero.secret_name == "Dive Wilson" 1ijklmnop
28 assert hero.age == 25 1ijklmnop
30 with Session(engine) as session: 1ijklmnop
31 heroes = session.exec(select(Hero)).all() 1ijklmnop
32 assert len(heroes) == 1 1ijklmnop
33 assert heroes[0].name == "Deadpond" 1ijklmnop
36def test_model_with_string_annotations(clear_sqlmodel): 1qrstuvwx
37 class Team(SQLModel, table=True): 1abcdefgh
38 id: Annotated[int | None, Field(primary_key=True)] = None 1abcdefgh
39 name: str 1abcdefgh
41 class Player(SQLModel, table=True): 1abcdefgh
42 id: Annotated[int | None, Field(primary_key=True)] = None 1abcdefgh
43 name: str 1abcdefgh
44 team_id: Annotated[int | None, Field(foreign_key="team.id")] = None 1abcdefgh
46 engine = create_engine("sqlite://") 1abcdefgh
47 SQLModel.metadata.create_all(engine) 1abcdefgh
49 team = Team(name="Champions") 1abcdefgh
50 player = Player(name="Alice", team_id=None) 1abcdefgh
52 with Session(engine) as session: 1abcdefgh
53 session.add(team) 1abcdefgh
54 session.commit() 1abcdefgh
55 session.refresh(team) 1abcdefgh
57 player.team_id = team.id 1abcdefgh
58 session.add(player) 1abcdefgh
59 session.commit() 1abcdefgh
60 session.refresh(player) 1abcdefgh
62 assert team.id is not None 1abcdefgh
63 assert player.team_id == team.id 1abcdefgh