簡體   English   中英

Pydantic model 將帕斯卡案例字段解析為蛇案例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM