diff --git a/sqlmodel/main.py b/sqlmodel/main.py index 45a41997fe..3ca32712b2 100644 --- a/sqlmodel/main.py +++ b/sqlmodel/main.py @@ -744,6 +744,9 @@ def get_column_from_field(field: Any) -> Column: # type: ignore "index": index, "unique": unique, } + description = getattr(field_info, "description", Undefined) + if description is not Undefined: + kwargs["comment"] = description sa_default = Undefined if field_info.default_factory: sa_default = field_info.default_factory diff --git a/tests/test_field_description.py b/tests/test_field_description.py new file mode 100644 index 0000000000..904a64a868 --- /dev/null +++ b/tests/test_field_description.py @@ -0,0 +1,23 @@ +from pytest import LogCaptureFixture +from sqlmodel import Field, SQLModel, create_engine + + +def test_sa_column_description(clear_sqlmodel: None, caplog: LogCaptureFixture) -> None: + class Team(SQLModel, table=True): + id: int = Field(primary_key=True, description="an id") + name: str = Field(description="a name") + age: int = Field() + + assert Team.model_fields["id"].description == "an id" + assert Team.model_fields["name"].description == "a name" + assert Team.model_fields["age"].description is None + + engine = create_engine("sqlite://", echo=True) # TODO: this should go to Postgres + SQLModel.metadata.create_all(engine) + msgs = [] + for msg in caplog.messages: + if "COMMENT ON COLUMN" in msg: + msgs.append(msg) + assert len(msgs) == 2 + assert "COMMENT ON COLUMN team.id IS 'an id'" in msgs[0] + assert "COMMENT ON COLUMN team.name IS 'a name'" in msgs[1]