python - pydantic 模型动态字段数据类型
问题描述
我想根据特定条件动态分配字段数据类型。以下是我的模型:
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
可以在不使用类型的附加type
字段的 情况下做到这一点Union
,因为
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='')
推荐阅读
- php - Nginx 负载平衡与代理 php-fpm - try_files
- python - 循环从一个数据帧在 matplotlib 中创建多个图形?
- angular8 - Angular Gridster-2 可重新拖动和调整大小
- python - 如何使用叠加的正方形可视化相对区域(使用 Python)?
- django - 在 django 的 requirements.txt 中安装 psycopg2 时出现错误代码
- reactjs - 如何通过单击父组件中的 Material UI Icon 来控制子组件
- ios - 领域更新删除现有数据
- ruby-on-rails - 如何为哈希编写 rspec 测试
- excel - Excel - 从多列返回相邻值
- python - 如何在python的单元格中编写Excel公式