Coverage for tests / test_select_typing.py: 100%
36 statements
« prev ^ index » next coverage.py v7.13.0, created at 2026-01-06 21:09 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2026-01-06 21:09 +0000
1from typing import Optional 1jklmnopqr
3from sqlmodel import Field, Session, SQLModel, create_engine, select 1jklmnopqr
4from sqlmodel.pool import StaticPool 1jklmnopqr
7def test_fields() -> None: 1jklmnopqr
8 class Hero(SQLModel, table=True): 1abcdefghi
9 id: Optional[int] = Field(default=None, primary_key=True) 1abcdefghi
10 name: str 1abcdefghi
11 secret_name: str 1abcdefghi
12 age: Optional[int] = None 1abcdefghi
13 food: Optional[str] = None 1abcdefghi
15 engine = create_engine( 1abcdefghi
16 "sqlite://", connect_args={"check_same_thread": False}, poolclass=StaticPool
17 )
19 SQLModel.metadata.create_all(engine) 1abcdefghi
21 with Session(engine) as session: 1abcdefghi
22 session.add(Hero(name="Deadpond", secret_name="Dive Wilson")) 1abcdefghi
23 session.add( 1abcdefghi
24 Hero(name="Spider-Boy", secret_name="Pedro Parqueador", food="pizza")
25 )
26 session.add(Hero(name="Rusty-Man", secret_name="Tommy Sharp", age=48)) 1abcdefghi
28 session.commit() 1abcdefghi
30 # check typing of select with 3 fields
31 with Session(engine) as session: 1abcdefghi
32 statement_3 = select(Hero.id, Hero.name, Hero.secret_name) 1abcdefghi
33 results_3 = session.exec(statement_3) 1abcdefghi
34 for hero_3 in results_3: 1abcdefghi
35 assert len(hero_3) == 3 1abcdefghi
36 name_3: str = hero_3[1] 1abcdefghi
37 assert type(name_3) is str 1abcdefghi
38 assert type(hero_3[0]) is int 1abcdefghi
39 assert type(hero_3[2]) is str 1abcdefghi
41 # check typing of select with 4 fields
42 with Session(engine) as session: 1abcdefghi
43 statement_4 = select(Hero.id, Hero.name, Hero.secret_name, Hero.age) 1abcdefghi
44 results_4 = session.exec(statement_4) 1abcdefghi
45 for hero_4 in results_4: 1abcdefghi
46 assert len(hero_4) == 4 1abcdefghi
47 name_4: str = hero_4[1] 1abcdefghi
48 assert type(name_4) is str 1abcdefghi
49 assert type(hero_4[0]) is int 1abcdefghi
50 assert type(hero_4[2]) is str 1abcdefghi
51 assert type(hero_4[3]) in [int, type(None)] 1abcdefghi
53 # check typing of select with 5 fields: currently runs but doesn't pass mypy
54 # with Session(engine) as session:
55 # statement_5 = select(Hero.id, Hero.name, Hero.secret_name, Hero.age, Hero.food)
56 # results_5 = session.exec(statement_5)
57 # for hero_5 in results_5:
58 # assert len(hero_5) == 5
59 # name_5: str = hero_5[1]
60 # assert type(name_5) is str
61 # assert type(hero_5[0]) is int
62 # assert type(hero_5[2]) is str
63 # assert type(hero_5[3]) in [int, type(None)]
64 # assert type(hero_5[4]) in [str, type(None)]