Pydantic环境变量自动加载吗

wen python案例 1

本文目录导读:

Pydantic环境变量自动加载吗

  1. 最常用的方式:Field(validation_alias) + SettingsConfigDict
  2. 手动加载环境变量
  3. 注意事项

默认情况下,Pydantic 不会自动加载环境变量

Pydantic v2 主要通过以下方式加载环境变量,需要你明确指定或使用特定配置:

最常用的方式:Field(validation_alias) + SettingsConfigDict

在 Pydantic v2 中,通常使用 BaseSettings 类(来自 pydantic-settings 库)并配合 SettingsConfigDict自动加载环境变量。

from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
    model_config = SettingsConfigDict(env_prefix='MYAPP_')  # 可选:环境变量前缀
    database_url: str = "default_localhost"  # 如果环境变量存在,会自动覆盖
    api_key: str = "default_key"
    debug: bool = False
# 实例化时会自动读取环境变量
settings = Settings()  # 此时会从 os.environ 中读取 DATABASE_URL, API_KEY, DEBUG

手动加载环境变量

如果不使用 BaseSettings,你需要手动读取:

import os
from pydantic import BaseModel, Field
class Config(BaseModel):
    database_url: str = Field(default=os.getenv("DATABASE_URL", "default_url"))
    api_key: str = Field(default=os.getenv("API_KEY", "default_key"))

这不是自动的,每次实例化时都会读取当前的环境变量。

注意事项

  • Pydantic v2 已将 BaseSettings 分离到独立库:需要额外安装 pydantic-settings

    pip install pydantic-settings
  • 环境变量名称匹配规则

    • 默认情况下,环境变量名与字段名 大小写不敏感 匹配
    • 可以通过 env_prefixenv_file 等配置调整
  • .env 文件自动加载

    class Settings(BaseSettings):
        model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8")
        database_url: str

    这会让 Pydantic 自动从 .env 文件加载环境变量。

使用方式 是否自动加载 需要安装
普通 BaseModel ❌ 否 不需要
BaseSettings(标准方式) ✅ 是 pydantic-settings
手动指定 Field(default=os.getenv(...)) ❌ 否(但读取了环境变量) 不需要

最佳实践:使用 pydantic-settingsBaseSettings 类,它会从环境变量和 .env 文件自动加载。

抱歉,评论功能暂时关闭!