Zum Inhalt

Alias

Ein Alias ist ein alternativer Name für ein Feld, der beim Serialisieren und Deserialisieren von Daten verwendet wird.

Sie können einen Alias auf folgende Weise angeben:

Beispiele für die Verwendung alias , validation_alias und serialization_alias finden Sie unter Feldaliase .

AliasPath und AliasChoices

??? API „API-Dokumentation“

[`pydantic.aliases.AliasPath`][pydantic.aliases.AliasPath]<br>
[`pydantic.aliases.AliasChoices`][pydantic.aliases.AliasChoices]<br>

Pydantic bietet zur Vereinfachung der Verwendung validation_alias zwei spezielle Typen: AliasPath und AliasChoices .

Der AliasPath wird verwendet, um mithilfe von Aliasen einen Pfad zu einem Feld anzugeben. Zum Beispiel:

from pydantic import BaseModel, Field, AliasPath


class User(BaseModel):
    first_name: str = Field(validation_alias=AliasPath('names', 0))
    last_name: str = Field(validation_alias=AliasPath('names', 1))

user = User.model_validate({'names': ['John', 'Doe']})  # (1)!
print(user)
#> first_name='John' last_name='Doe'
  1. Wir verwenden model_validate , um ein Wörterbuch mithilfe der Feldaliase zu validieren.

Weitere Details zu model_validate finden Sie in der API-Referenz.

Im Feld 'first_name' verwenden wir den Alias 'names' und den Index 0 um den Pfad zum Vornamen anzugeben. Im Feld 'last_name' verwenden wir den Alias 'names' und den Index 1 , um den Pfad zum Nachnamen anzugeben.

AliasChoices wird verwendet, um eine Auswahl an Aliasnamen anzugeben. Zum Beispiel:

from pydantic import BaseModel, Field, AliasChoices


class User(BaseModel):
    first_name: str = Field(validation_alias=AliasChoices('first_name', 'fname'))
    last_name: str = Field(validation_alias=AliasChoices('last_name', 'lname'))

user = User.model_validate({'fname': 'John', 'lname': 'Doe'})  # (1)!
print(user)
#> first_name='John' last_name='Doe'
user = User.model_validate({'first_name': 'John', 'lname': 'Doe'})  # (2)!
print(user)
#> first_name='John' last_name='Doe'
  1. Wir verwenden für beide Felder die zweite Alias-Auswahl.
  2. Wir verwenden die erste Alias-Auswahl für das Feld 'first_name' und die zweite Alias-Auswahl für das Feld 'last_name' .

Sie können AliasChoices auch mit AliasPath verwenden:

from pydantic import BaseModel, Field, AliasPath, AliasChoices


class User(BaseModel):
    first_name: str = Field(validation_alias=AliasChoices('first_name', AliasPath('names', 0)))
    last_name: str = Field(validation_alias=AliasChoices('last_name', AliasPath('names', 1)))


user = User.model_validate({'first_name': 'John', 'last_name': 'Doe'})
print(user)
#> first_name='John' last_name='Doe'
user = User.model_validate({'names': ['John', 'Doe']})
print(user)
#> first_name='John' last_name='Doe'
user = User.model_validate({'names': ['John'], 'last_name': 'Doe'})
print(user)
#> first_name='John' last_name='Doe'

Verwendung von Alias-Generatoren

Sie können den Parameter alias_generator von Config verwenden, um ein Callable (oder eine Gruppe von Callables über AliasGenerator ) anzugeben, das Aliase für alle Felder in einem Modell generiert. Dies ist nützlich, wenn Sie eine einheitliche Namenskonvention für alle Felder in einem Modell verwenden möchten, den Alias jedoch nicht für jedes Feld einzeln angeben möchten.

!!! Hinweis: Pydantic bietet drei integrierte Alias-Generatoren, die Sie sofort verwenden können:

[`to_pascal`][pydantic.alias_generators.to_pascal]<br>
[`to_camel`][pydantic.alias_generators.to_camel]<br>
[`to_snake`][pydantic.alias_generators.to_snake]<br>

Verwendung eines Callables

Hier ist ein einfaches Beispiel für die Verwendung eines Callable:

from pydantic import BaseModel, ConfigDict


class Tree(BaseModel):
    model_config = ConfigDict(
        alias_generator=lambda field_name: field_name.upper()
    )

    age: int
    height: float
    kind: str


t = Tree.model_validate({'AGE': 12, 'HEIGHT': 1.2, 'KIND': 'oak'})
print(t.model_dump(by_alias=True))
#> {'AGE': 12, 'HEIGHT': 1.2, 'KIND': 'oak'}

Verwendung eines AliasGenerator

??? API „API-Dokumentation“

[`pydantic.aliases.AliasGenerator`][pydantic.aliases.AliasGenerator]<br>

AliasGenerator ist eine Klasse, mit der Sie mehrere Aliasgeneratoren für ein Modell angeben können. Sie können einen AliasGenerator verwenden, um verschiedene Aliasgeneratoren für die Validierung und Serialisierung anzugeben.

Dies ist besonders nützlich, wenn Sie zum Laden und Speichern von Daten unterschiedliche Namenskonventionen verwenden müssen, die Validierungs- und Serialisierungsaliase jedoch nicht für jedes Feld einzeln angeben möchten.

Zum Beispiel:

from pydantic import AliasGenerator, BaseModel, ConfigDict


class Tree(BaseModel):
    model_config = ConfigDict(
        alias_generator=AliasGenerator(
            validation_alias=lambda field_name: field_name.upper(),
            serialization_alias=lambda field_name: field_name.title(),
        )
    )

    age: int
    height: float
    kind: str


t = Tree.model_validate({'AGE': 12, 'HEIGHT': 1.2, 'KIND': 'oak'})
print(t.model_dump(by_alias=True))
#> {'Age': 12, 'Height': 1.2, 'Kind': 'oak'}

Alias-Vorrang

Wenn Sie einen alias für das Field angeben, hat dieser standardmäßig Vorrang vor dem generierten Alias:

from pydantic import BaseModel, ConfigDict, Field


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


class Voice(BaseModel):
    model_config = ConfigDict(alias_generator=to_camel)

    name: str
    language_code: str = Field(alias='lang')


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

Alias-Priorität

Sie können alias_priority für ein Feld festlegen, um dieses Verhalten zu ändern:

  • alias_priority=2 Der Alias wird vom Aliasgenerator nicht überschrieben.
  • alias_priority=1 Der Alias wird vom Alias-Generator überschrieben.
  • alias_priority nicht gesetzt:
    • Alias ist festgelegt: Der Alias wird vom Alias-Generator nicht überschrieben.
    • Alias ist nicht festgelegt: Der Alias wird vom Alias-Generator überschrieben.

Die gleiche Priorität gilt für validation_alias und serialization_alias . Weitere Informationen zu den verschiedenen Feldaliasen finden Sie unter Feldaliase .


本文总阅读量