[英]How to inflect from snake case to camel case post the pydantic schema validations
[英]Pydantic model parse pascal case fields to snake case
我有一個 Pydantic class model 代表一個外國 API 看起來像這樣:
class Position(BaseModel):
AccountID: str
AveragePrice: str
AssetType: str
Last: str
Bid: str
Ask: str
ConversionRate: str
DayTradeRequirement: str
InitialRequirement: str
PositionID: str
LongShort: str
Quantity: int
Symbol: str
Timestamp: str
TodaysProfitLoss: str
TotalCost: str
MarketValue: str
MarkToMarketPrice: str
UnrealizedProfitLoss: str
UnrealizedProfitLossPercent: str
UnrealizedProfitLossQty: str
這是我需要指向的 API 端點的名稱。 我只是想將 pascal case 字段更改為 pythonic 設計。
我想要的是反序列化外國 API 並使用 Pydantic 的 BaseModel class 將其序列化回來。
我的問題是,如果我使用 Pydantic 的 class Fields
,如下所示:
class Position(BaseModel):
account_id: str = Field(alias='AccountID')
average_price: str = Field(alias='AveragePrice')
asset_type: str = Field(alias='AssetType')
last: str = Field(alias='Last')
bid: str = Field(alias='Bid')
ask: str = Field(alias='Ask')
conversion_rate: str = Field(alias='ConversionRate')
day_trade_requirement: str = Field(alias='DayTradeRequirement')
initial_requirement: str = Field(alias='InitialRequirement')
position_id: str = Field(alias='PositionID')
long_short: str = Field(alias='LongShort')
quantity: int = Field(alias='Quantity')
symbol: str = Field(alias='Symbol')
timestamp: str = Field(alias='Timestamp')
todays_profit_loss: str = Field(alias='TodaysProfitLoss')
total_cost: str = Field(alias='TotalCost')
market_value: str = Field(alias='MarketValue')
mark_to_market_price: str = Field(alias='MarkToMarketPrice')
unrealized_profit_loss: str = Field(alias='UnrealizedProfitLoss')
unrealized_profit_loss_percent: str = Field(alias='UnrealizedProfitLossPercent')
unrealized_profit_loss_qty: str = Field(alias='UnrealizedProfitLossQty')
我只能反序列化它而不是相反。
有什么辦法可以為兩個“方向”做到這一點?
是的,有可能,使用.dict(by_alias=True)
,見例子:
from pydantic import BaseModel, Field
class Position(BaseModel):
account_id: str = Field(alias='AccountID')
pos2 = Position(AccountID='10')
print(pos2.dict())
print(pos2.dict(by_alias=True))
Output:
{'account_id': '10'}
{'AccountID': '10'}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.