Pydantic のエイリアスについて¶
Pydantic 1 系でフィールド名と入力データのキー名が違う場合に、alias で対応付ける例を示す。2 系向けには更新していないため、対象のバージョンを確認してから使ってほしい。
Pydantic とは¶
Pydanticを使うと、Python の型アノテーションをもとにデータをバリデーションできる。FastAPI 等でも使われているライブラリだ。
Warning
本記事は pydantic 1 系の時に書いたもの。2 系の内容に更新できていないため、2 系の情報は公式ドキュメントを参照してほしい。
エイリアスの指定方法¶
入力データのキー名がモデルのフィールド名と異なる場合は、エイリアスで対応付けられる。公式のサンプルコードのように snake case のプロパティに upper camel case のデータフィールドを関連付けできる。
上のコードでVoice(name='Filiz', language_code='tr-TR')を実行すると validation エラーになる。モデルのフィールド名とエイリアス名のどちらでもモデルを作成できるようにするには、Config クラスにallow_population_by_field_name=Trueを記す必要がある。エイリアス名・フィールド名とallow_population_by_field_nameの組み合わせで、結果は次のように変わる。
| 呼び出し方 | allow_population_by_field_name | 結果 |
|---|---|---|
Voice(Name='Filiz', LanguageCode='tr-TR')(エイリアス名で指定) | 未設定 | 成功する |
Voice(name='Filiz', language_code='tr-TR')(フィールド名で指定) | 未設定 | validation エラーになる |
Voice(Name='Filiz', LanguageCode='tr-TR')(エイリアス名で指定) | True | 成功する |
Voice(name='Filiz', language_code='tr-TR')(フィールド名で指定) | True | 成功する |
エイリアスの優先順位¶
同じフィールドのエイリアスを複数の手段で設定した場合、どの設定を適用するかは次の優先順位で決まる。
- モデルの
Field(..., alias=<alias>)による直接指定 - モデルの
Config.fieldsでの定義 - 親モデルの
Field(..., alias=<alias>)による直接指定 - 親モデルの
Config.fieldsでの定義 - モデルや親モデルの区別なく、
alias_generatorによる生成