Python Sqlalchemy-根据另一列中的更改更新列
我正在使用Python Sqlalchemy-根据另一列中的更改更新列,python,sqlalchemy,Python,Sqlalchemy,我正在使用sqlalchemy,但发现文档很难搜索 我有两个专栏: verified = Column(Boolean, default=False) verified_at = Column(DateTime, nullable=True) 我想创建一个函数,它可以执行以下操作: if self.verified and not oldobj.verified: self.verified_at = datetime.datetime.utcnow
sqlalchemy
,但发现文档很难搜索
我有两个专栏:
verified = Column(Boolean, default=False)
verified_at = Column(DateTime, nullable=True)
我想创建一个函数,它可以执行以下操作:
if self.verified and not oldobj.verified:
self.verified_at = datetime.datetime.utcnow
if not self.verified and oldobj.verified:
self.verified_at = None
我不知道这样的代码应该放在哪里。我可以将它放在应用程序中,但更希望
模型对象处理此逻辑。您可以使用sqlalchemy的事件注册来放置这样的代码:。
基本上,您可以订阅在核心和ORM中发生的某些事件。我认为这是一个干净的方法来管理你想要实现的目标
您可以使用decorator,以便在这些列发生更改时进行挂钩。我认为您需要的是一个
您希望根据一些传入的新值以特定方式更新您的verified_at
值。使用属性包装基础值,并且仅在适当时更新,并且仅更新到您在数据库中实际保留的内容。这是尝试解决此类问题的良好开端
一种方法是设置一个更新时间戳的事件侦听器:
@event.listens_for(MyModel.verified, 'set')
def mymodel_verified_set(target, value, oldvalue, initiator):
"""Set verified_at"""
if value != oldvalue:
target.verified_at = datetime.datetime.utcnow() if value else None
@event.listens_for(MyModel.verified, 'set')
def mymodel_verified_set(target, value, oldvalue, initiator):
"""Set verified_at"""
if value != oldvalue:
target.verified_at = datetime.datetime.utcnow() if value else None