Python SQLModel - 自动增量的可选 ID 值在从数据库检索时会导致类型错误

问题描述 投票:0回答:2

如果我有这样的模型:

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 类型?

python fastapi sqlmodel
2个回答
1
投票

您可能会在这里找到答案: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
对象。


1
投票

确保在定义 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/

© www.soinside.com 2019 - 2024. All rights reserved.