コンテンツにスキップ

Pydantic のエイリアスについて

Pydantic とは

Pydanticは Python の型アノテーションを用いてデータのバリデーションをしてくれるライブラリ。FastAPI 等でも使われている。

Warning

この記事は pydantic 1 系の時に書いたもの。2 系の内容に更新できていないため、2 系の情報は公式ドキュメントを参照されたい。

Pydantic のエイリアスについて

データソースのフィールド名がコードスタイルと合わない場合にエイリアス名を使ってデータ化できる。公式のサンプルコードのように snake case のプロパティに upper camel case のデータフィールドを紐づけることができる。

from pydantic import BaseModel


def to_camel(string: str) -> str:
    return ''.join(word.capitalize() for word in string.split('_'))


class Voice(BaseModel):
    name: str
    language_code: str

    class Config:
        alias_generator = to_camel


voice = Voice(Name='Filiz', LanguageCode='tr-TR')
print(voice.language_code)
#> tr-TR
print(voice.dict(by_alias=True))
#> {'Name': 'Filiz', 'LanguageCode': 'tr-TR'}

このコードでVoice(name='Filiz', language_code='tr-TR')を実行すると validation エラーになる。エイリアス前の名前とエイリアス名、両方を使ってデータ化できるようにするにはallow_population_by_field_name=Trueを Config クラスに記す必要がある。

エイリアスの指定方法がいくつかあるが、次の優先順位にしたがって設定される。

  1. モデル上で直接、Field(..., alias=)を介して設定される
  2. Config.fields で定義され、モデル上で直接設定される
  3. 親モデルの Field(..., alias=)を通して設定される
  4. 親モデルの Config.fields で定義される
  5. モデルや親に関係なく、alias_generator によって生成される