Pydantic 嵌套设置对象从文件加载环境变量

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

使用 pydantic 设置管理,如何在主设置类的嵌套设置对象上加载环境变量?在下面的代码中,

sub_field
env 变量字段没有被加载。
field_one
field_two
加载良好。如何加载环境文件,以便将值向下传播到嵌套的
sub_settings
对象?

from typing import Optional
from pydantic import BaseSettings, Field


class SubSettings(BaseSettings):
    sub_field: Optional[str] = Field(None, env='SUB_FIELD')


class Settings(BaseSettings):
    field_one: Optional[str] = Field(None, env='FIELD_ONE')
    field_two: Optional[int] = Field(None, env='FIELD_TWO')
    sub_settings: SubSettings = SubSettings()


settings = Settings(_env_file='local.env')
python pydantic
1个回答
0
投票

docs 中有一些嵌套加载 pydantic env 变量的示例。

如果您愿意调整变量名称,一种策略是使用

env_nested_delimiter
来表示嵌套字段。

所以像这样的 local.env:

FIELD_ONE=one
FIELD_TWO=2
SUB_SETTINGS__SUB_FIELD=value

你应该可以通过这种方式加载设置

from typing import Optional
from pydantic import BaseModel, BaseSettings


class SubSettings(BaseModel):
     # ^ Note that this inherits from BaseModel, not BaseSettings
    sub_field: Optional[str]


class Settings(BaseSettings):
    field_one: Optional[str]
    field_two: Optional[int]
    sub_settings: SubSettings

    class Config:
        env_nested_delimiter = '__'
© www.soinside.com 2019 - 2024. All rights reserved.