Skip to content
Jetsukda's Blog

วิธีการใช้ Pydantic-Settings ในการจัดการ env vars

· 2 min read

ในการจัดการเกี่ยวกับ Environment variables เราจะใช้ .env ไฟล์ในการเก็บพวก API Key, Password หรือเก็บพวก Config ต่างๆ ที่เราใช้ใน application

ยกตัวอย่างเรามี .env ไฟล์ตามด้านล่าง

ANTHROPIC_API_KEY=123456789
ANTHROPIC_MODEL=claude-opus-4-6

ENVIRONMENT=production
FAST_API_URL=http://localhost:8080
FAST_API_KEY=123456789.env

ซึ่งใน Python ท่าที่นิยมใช้กันจะเป็นใช้ load_dotenv ในการเอา env variable มาใช้ต่อใน Code

import os
from dotenv import load_dotenv

load_dotenv()

ANTHROPIC_API_KEY = os.getenv('ANTHROPIC_API_KEY')
ANTHROPIC_MODEL = os.getenv('ANTHROPIC_MODEL')
ENVIRONMENT = os.getenv('ENVIRONMENT')
FAST_API_URL = os.getenv('FAST_API_URL')
FAST_API_KEY = os.getenv('FAST_API_KEY')example_load_dotenv.py

แต่ถ้าเราใช้ pydantic-settings จะเป็น

💡SecretStr คืออะไร?

SecretStr เป็น type พิเศษของ Pydantic สำหรับเก็บค่าที่เป็นความลับ เช่น API Key หรือ Password สิ่งที่ต่างจาก str ธรรมดา คือ:

  • print(settings.ANTHROPIC_API_KEY) จะแสดงเป็น ********** แทนค่าจริง ป้องกัน secret หลุดใน log
  • ต้องเรียก .get_secret_value() เพื่อดึงค่าจริงออกมาใช้งาน
from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import SecretStr

class Settings(BaseSettings):
    model_config = SettingsConfigDict(
        env_file=".env", env_ignore_empty=True
    )

    ANTHROPIC_API_KEY: SecretStr
    ANTHROPIC_MODEL: str
    ENVIRONMENT: str
    FAST_API_URL: str
    FAST_API_KEY: SecretStr

settings = Settings()
print(settings.ANTHROPIC_API_KEY.get_secret_value())pydantic_setting_example.py

แล้วยังสามารถแยก settings ออกมาได้ด้วย env_prefix ซึ่งจะทำให้แต่ละ class อ่าน env var ตาม prefix ที่กำหนด

from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import SecretStr


class Settings(BaseSettings):
    model_config = SettingsConfigDict(
        env_file=".env",env_ignore_empty=True
    )
    ENVIRONMENT: str

class AnthropicSettings(BaseSettings):
    model_config = SettingsConfigDict(
        env_file=".env", env_prefix="ANTHROPIC_"
    )

    api_key: SecretStr  # อ่านจาก ANTHROPIC_API_KEY
    model: str          # อ่านจาก ANTHROPIC_MODEL

class FastAPISettings(BaseSettings):
    model_config = SettingsConfigDict(
        env_file=".env", env_prefix="FAST_API_"
    )
    url: str            # อ่านจาก FAST_API_URL
    api_key: SecretStr  # อ่านจาก FAST_API_KEY


settings = Settings()
anthropic = AnthropicSettings()
fastapi = FastAPISettings()pydantic_separate_setting_example.py