Default values for fields not working as expected with SQLModel in PostgreSQL #1452
-
Privileged issue
Issue ContentI'm encountering an issue where default values for fields in my SQLModel class are not being applied when using PostgreSQL. Despite specifying default or default_factory for various fields, the database does not seem to handle these defaults, and errors occur during table creation or insertion. from datetime import datetime
from sqlmodel import Field, SQLModel
from typing import Optional
class Posts(SQLModel, table=True):
id: Optional[int] = Field(default_factory=int, primary_key=True)
title: str
content: str
published: Optional[bool] = Field(default_factory=lambda: True)
created_at: Optional[datetime] = Field(default_factory=datetime.now) |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment
-
post = Posts(title="Some title", content="Some Content")
assert post.id == 0 If you go directly to the Postgres DB and try to add a row there, these defaults won't be considered. |
Beta Was this translation helpful? Give feedback.
default
anddefault_factory
arguments are only Python-level defaults. They'll assign a default value to your field only during the creation of instances in Python.If you go directly to the Postgres DB and try to add a row there, these defaults won't be considered.
In order to enforce the default in DB level, you can use
sa_column_kwargs={"server_default": "<value>"}
argument.I hope this will solve your issue.