【发布时间】:2021-09-07 19:40:35
【问题描述】:
我们使用 Pydantic 设置“领域模型”并在整个应用层使用它们。
import datetime
from decimal import Decimal
from pydantic import BaseModel
class Person(BaseModel):
name: str
birth_date: datetime.date
height: Decimal
# other 100 fields, most of them Decimal
现在我们需要将其中一个模型导出为 CSV,第一个实现很简单:
import csv
from typing import Iterable
def store(persons: Iterable[Person]):
fieldnames = list(Person.schema()["properties"].keys())
with open("/tmp/test.csv", "w") as fp:
writer = csv.DictWriter(fp, fieldnames=fieldnames)
writer.writeheader()
for person in persons:
writer.writerow(person.dict())
但还有更多,因为我们希望所有小数都限制在小数点后两位,我们如何才能做到这一点?
注意:不会将序列化逻辑放入域模型中,但我愿意为序列化创建一个新模型。
【问题讨论】:
标签: python csv serialization decimal pydantic