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
« prev ^ index » next coverage.py v7.13.0, created at 2026-11-09 00:02 +0000
1from typing import Any 1jklmnopqr
3import pytest 1jklmnopqr
4from sqlalchemy import Engine, ForeignKey, Integer, String, inspect 1jklmnopqr
5from sqlmodel import Field, SQLModel 1jklmnopqr
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
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 )
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
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 )
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
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