如何将 Pydantic 模型中的 env 文件中的字符串转换为 dict 变量?

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

我想在我的 env 文件中使用 dict 的字符串表示形式。它看起来像:

# .env
a="a"
b="b"
c='{"s": 1, ...}'

我正在为其创建 pydantic BaseSetting 模型,并为 env 中的变量“c”创建模型:

class C_MODEL(BaseModel):
    s: int
    ...

class Settings(BaseSettings):

    class Config: 
        env_file = '.env'
        env_file_encoding = 'utf-8'

    a: str 
    b: str = "default"
    c: C_MODEL = C_MODEL()

settings: Settings = Settings()

但是当我尝试举例时,我有:

pydantic.error_wrappers.ValidationError: 1 validation errors for C_MODEL

我认为 BaseModel 无法将字符串输入到 dict 并对 C_MODEL 类进行验证。

在这种情况下,如何从 env 文件中的字符串制作字典来制作 C_MODEL 结构并使用:

settings: Settings = Settings()
settings.c.s # == 1

在我的代码中?

我从 pydantic 文档中阅读了有关 SettingsBase 类的信息,但没有找到任何内容。

我还了解了 validator 和 root_validator,但无法用它编写任何工作代码。

P.S:环境文件的路径没有问题,只有其中的变量类型。

environment-variables pydantic typing
1个回答
0
投票

您可以:

只需将字段描述为字典,即可从编码的 JSON 环境变量中创建字典,如此处

所述
class _Settings(BaseSettings):
    c: dict

或者您可以直接创建一个类并将其用作类型提示,但不要忘记预先填充环境变量

example.py

class YourCustomField(BaseModel):
    foo: str
    baz: int


class _Settings(BaseSettings):
    c: YourCustomField

.env

c={"foo":"bar", "baz": 1}
© www.soinside.com 2019 - 2024. All rights reserved.