如果我有这样的模型:
class MyModel(DBModel, table=True):
id: Optional[int] = Field( primary_key=True)
然后将新记录保存到数据库时,会自动分配ID,这很棒。
但是,当我像这样检索模型时,我收到类型错误
model = session.get(MyModel, 1)
id: int = model.id # ID may be None error
有没有办法自动分配我的 ID,同时在检索保存的记录时定义 ID 类型?
您可能会在这里找到答案:https://sqlmodel.tiangolo.com/tutorial/fastapi/multiple-models/#multiple-models-with-inheritance
基本上你可以做的就是像这样定义你的模型:
class MyModelBase(SQLModel):
arg1: str
...
class MyModel(MyModelBase, table=True):
id: Optional[int] = Field( primary_key=True)
class MyModelRead(MyModelBase):
id: int
就像你说的
MyModelRead
必须有一个属性 id
。请注意,只有 MyModelBase
是 SQLModel
。其他类是 Pydantic
对象。
确保在定义 id 字段时,明确指定 ID 的默认值,如下所示
class MyModel(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
因为我们没有设置id,所以它采用我们在
None
中设置的Python默认值Field(default=None)
。
ID 在我们提交
database
时设置。
有关更多信息,请阅读文档 https://sqlmodel.tiangolo.com/tutorial/automatic-id-none-refresh/