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:
alias
für dasField
- muss ein
str
sein
- muss ein
validation_alias
für dasField
- kann eine Instanz von
str
,AliasPath
oderAliasChoices
sein.
- kann eine Instanz von
serialization_alias
auf demField
- muss ein
str
sein
- muss ein
alias_generator
auf derConfig
- kann ein Callable oder eine Instanz von
AliasGenerator
sein.
- kann ein Callable oder eine Instanz von
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'
- 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'
- Wir verwenden für beide Felder die zweite Alias-Auswahl.
- 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 .
本文总阅读量次