Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Sqlalchemy-根据另一列中的更改更新列_Python_Sqlalchemy - Fatal编程技术网

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