Python DTO 数据处理笔记
我们有以下嵌套结构的DTO:
# 示例:嵌套的 DTO 结构
class PlotDTO(BaseDTO):
color: str = "red"
size: int = 10
class AnalysisDTO(BaseDTO):
name: str = "test"
plot: PlotDTO = PlotDTO() # 嵌套的 DTO 对象
那需要进行对应的操作,该如何做?
DTO对应数据库的字段,数据库表通常是扁平结构,所以1. 这里的数据需要扁平化、2. SQL 操作需要简单的键值对。
# 不使用递归:
{
'name': 'test',
'plot': PlotDTO(color='red', size=10) # 对象引用,无法直接存储
}
# 使用递归:
{
'name': 'test',
'color': 'red', # 扁平化后的字段
'size': 10 # 扁平化后的字段
}
具体代码中如何实现上面的 扁平化
?
# 函数基本实现
def model_dump(self) -> dict:
payload = {}
for k, v in vars(self).items():
if isinstance(value, Base):
payload |= value.model_dump() # 因为可能嵌套所以需要递归到最低层
else:
payload[key] = value # 否则就是已经最底层的,可以直接存储
return payload
理解了代码,我们判断一下下面的代码通过model_dump
函数扁平化后会变成什么?
# 原始数据结构
analysis = AnalysisDTO(
name="test",
plot=PlotDTO(color="red", size=10)
)
⬇️扁平化后数据如下⬇️
{
'name': 'test',
'color': 'red',
'size': 10
}