【问题标题】:How to use a reserved keyword in pydantic model如何在 pydantic 模型中使用保留关键字
【发布时间】:2022-01-04 20:34:14
【问题描述】:

我需要创建一个架构,但它有一个名为 global 的列,当我尝试编写此内容时,出现错误。

class User(BaseModel):

    id:int
    global:bool

我尝试使用其他名称,但尝试保存在 db 中时出现另一个错误。

【问题讨论】:

  • global 是保留关键字是有原因的。找另一个名字。
  • is_global 这样的东西无论如何都会更清楚。为什么一定要叫global?当然有一种方法可以将 python 变量名映射到 SQL 列名,而不需要它们相同。
  • 请记住,global 可能不是无效的列名,但在这样的class 语句中语法上无效,因此您需要找到将列添加到模型的另一种方法。
  • 作为一个类似的例子,foo.global = 5 之类的东西是语法错误,但setattr(foo, "global", 5) 是完全合法的。
  • 我知道这是一个保留关键字 man (但我需要使用表列的相同名称),因为我提出了这个问题,但是 mx0 给出的解决方案对我来说很好,谢谢大家。

标签: python fastapi pydantic


【解决方案1】:

看起来您正在使用 pydantic 模块。你不能使用名称​​global,因为它是一个保留关键字,所以你需要使用这个技巧来转换它。

class User(BaseModel):
    id: int
    global_: bool

    class Config:
        fields = {
            'global_': 'global'
        }

class User(BaseModel):
    id: int
    global_: bool = Field(..., alias='global')

要创建一个类,您必须使用字典(因为User(id=1, global=False) 也会引发错误:

user = User(**{'id': 1, 'global': False})

要以正确的模式获取数据,请使用 by_alias

user.dict(by_alias=True)

【讨论】:

    猜你喜欢
    • 2012-08-03
    • 2021-11-14
    • 2020-06-22
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    相关资源
    最近更新 更多