簡體   English   中英

pydantic 模型動態字段數據類型

[英]pydantic model dynamic field data type

我想根據特定條件動態分配字段數據類型。 以下是我的模型:

class Connection(BaseModel):
    name: str
    # type can be GCS or ORACLE
    type: str
    details: GCSDetails/OracleDetails

class GCSDetails(BaseModel):
    bucket: str
    folderName: str

class OracleDetails(BaseModel):
    host: str
    port: int
    user: str

那么,基於“類型”,即 GCS 或 ORACLE,我如何在驗證期間動態更改“詳細信息”數據類型?

Pydantic可以通過Union類型在不使用額外type字段的情況下做到這一點,因為

pydantic將嘗試“匹配”在Union下定義的任何類型,並將使用第一個匹配的類型。

from typing import Union

from pydantic import BaseModel


class GCSDetails(BaseModel):
    bucket: str
    folderName: str


class OracleDetails(BaseModel):
    host: str
    port: int
    user: str


class Connection(BaseModel):
    name: str
    # type can be GCS or ORACLE
    type: str
    details: Union[GCSDetails, OracleDetails]


test_gcs = {"name": "", "type": "GCS", "details": {"bucket": "", "folderName": ""}}
test_oracle = {"name": "", "type": "ORACLE", "details": {"host": "", "port": 15, "user": ""}}

print(Connection(**test_gcs))
print(Connection(**test_oracle))

輸出:

name='' type='GCS' details=GCSDetails(bucket='', folderName='')
name='' type='ORACLE' details=OracleDetails(host='', port=15, user='')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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