Coverage for tests / test_field_sa_args_kwargs.py: 100%

20 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-06-10 09:40 +0000

1from sqlalchemy import ForeignKey 1qrstuvwx

2from sqlmodel import Field, SQLModel, create_engine 1qrstuvwx

3 

4 

5def test_sa_column_args(clear_sqlmodel, caplog) -> None: 1qrstuvwx

6 class Team(SQLModel, table=True): 1abcdefgh

7 id: int | None = Field(default=None, primary_key=True) 1abcdefgh

8 name: str 1abcdefgh

9 

10 class Hero(SQLModel, table=True): 1abcdefgh

11 id: int | None = Field(default=None, primary_key=True) 1abcdefgh

12 team_id: int | None = Field( 1abcdefgh

13 default=None, 

14 sa_column_args=[ForeignKey("team.id")], 

15 ) 

16 

17 engine = create_engine("sqlite://", echo=True) 1abcdefgh

18 SQLModel.metadata.create_all(engine) 1abcdefgh

19 create_table_log = [ 1abcdefgh

20 message for message in caplog.messages if "CREATE TABLE hero" in message 

21 ][0] 

22 assert "FOREIGN KEY(team_id) REFERENCES team (id)" in create_table_log 1abcdefgh

23 

24 

25def test_sa_column_kargs(clear_sqlmodel, caplog) -> None: 1qrstuvwx

26 class Item(SQLModel, table=True): 1ijklmnop

27 id: int | None = Field( 1ijklmnop

28 default=None, 

29 sa_column_kwargs={"primary_key": True}, 

30 ) 

31 

32 engine = create_engine("sqlite://", echo=True) 1ijklmnop

33 SQLModel.metadata.create_all(engine) 1ijklmnop

34 create_table_log = [ 1ijklmnop

35 message for message in caplog.messages if "CREATE TABLE item" in message 

36 ][0] 

37 assert "PRIMARY KEY (id)" in create_table_log 1ijklmnop