[Python开发笔记] DTO 数据处理笔记

2 阅读1分钟

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
}