我正在尝试在我的 SQLAlchemy 数据源中的实体和从其他地方(外部 REST API)拉入的实体之间执行每个字段的合并。我想做的是这样的:
class Person:
__tablename__ = "people"
id = Column(Integer,primary_key=True)
name = Column(String)
nameDatestamp = Column(DateTime)
address = Column(String)
addressDatestamp = Column(DateTime)
def merge(myPerson, foreignPerson):
if myPerson.nameDateStamp < foreignPerson.nameDateStamp:
myPerson.name = foreignPerson.name
myPerson.nameDateStamp = foreignPerson.nameDateStamp
if myPerson.addressDatestamp < foreignPerson.addressDateStamp:
myPerson.addressDatestamp = foreignPerson.addressDateStamp
myPerson.address = foreignPerson.address
对于很多课程和很多领域。这似乎太冗长而不能成为最佳实践。
我可以引入新的数据模型,例如 DateStampedString(它将由一个日期戳和一个字符串组成)、DateStampedRelationship 等,但我担心使用多个表的额外间接性会提高合并的速度
我可以使用带有参数的 Python 装饰器,这些参数会在运行时和创建表之前将额外的日期戳列动态添加到我的模型中,例如
@datestamp(name,address) class Person: ...
也许我可以以某种方式利用
sqlalchemy.types.TypeDecorator
, 来构建一个新的数据类型,但它似乎对从 (opaque type)->(sqlalchemy type) 开始而不是将两种类型捆绑在一起感兴趣。
我正在尝试做的事情是否有最佳实践?
编辑:我正在寻找
- 一种更简洁的方式来声明某些字段有日期戳
- 某种方式来迭代带日期标记的字段,这样我的合并函数就不必知道它正在合并哪个键
- 每当值更改时,通过某种方式使日期戳保持最新