Coverage for tests / test_field_sa_args_kwargs.py: 100%

29 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-11-09 00:02 +0000

1from typing import Any 1jklmnopqr

2 

3import pytest 1jklmnopqr

4from sqlalchemy import Engine, ForeignKey, Integer, String, inspect 1jklmnopqr

5from sqlmodel import Field, SQLModel 1jklmnopqr

6 

7 

8def test_sa_column_args(database_engine: Engine) -> None: 1jklmnopqr

9 class Team(SQLModel, table=True): 1abcdefghi

10 id: int | None = Field(default=None, primary_key=True) 1abcdefghi

11 name: str 1abcdefghi

12 

13 class Hero(SQLModel, table=True): 1abcdefghi

14 id: int | None = Field(default=None, primary_key=True) 1abcdefghi

15 team_id: int | None = Field( 1abcdefghi

16 default=None, 

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

18 ) 

19 

20 engine = database_engine 1abcdefghi

21 SQLModel.metadata.create_all(engine) 1abcdefghi

22 foreign_keys = inspect(engine).get_foreign_keys("hero") 1abcdefghi

23 assert len(foreign_keys) == 1 1abcdefghi

24 assert foreign_keys[0]["constrained_columns"] == ["team_id"] 1abcdefghi

25 assert foreign_keys[0]["referred_table"] == "team" 1abcdefghi

26 assert foreign_keys[0]["referred_columns"] == ["id"] 1abcdefghi

27 

28 

29def test_sa_column_kargs(database_engine: Engine) -> None: 1jklmnopqr

30 class Item(SQLModel, table=True): 1stuvwxyzA

31 id: int | None = Field( 1stuvwxyzA

32 default=None, 

33 sa_column_kwargs={"primary_key": True}, 

34 ) 

35 

36 engine = database_engine 1stuvwxyzA

37 SQLModel.metadata.create_all(engine) 1stuvwxyzA

38 primary_key = inspect(engine).get_pk_constraint("item") 1stuvwxyzA

39 assert primary_key["constrained_columns"] == ["id"] 1stuvwxyzA

40 

41 

42@pytest.mark.parametrize( 1jklmnopqr

43 "field_kwargs", 

44 [ 

45 {"sa_column_kwargs": {"type_": Integer}}, 

46 {"sa_type": String, "sa_column_kwargs": {"type_": Integer}}, 

47 ], 

48) 

49def test_sa_column_kwargs_type_raises(field_kwargs: dict[str, Any]) -> None: 1jklmnopqr

50 with pytest.raises( 1BCDEFGHIJ

51 RuntimeError, 

52 match="Passing type_ is not supported in sa_column_kwargs, use sa_type instead", 

53 ): 

54 Field(**field_kwargs) 1BCDEFGHIJ