Python 使用型号'进行批量更新;SQLAlchemy中的s方法

Python 使用型号'进行批量更新;SQLAlchemy中的s方法,python,sqlalchemy,Python,Sqlalchemy,我正在用SQLAlchemy开发一个应用程序,遇到了一些问题。我希望在查询返回的所有模型上运行一个方法,并在单个SQL查询中实现所有这些,同时保持ORM提供的可读性 该方法非常简单,不依赖任何外部数据,也不进行任何查询。如果批量更新中的所有模型使用相同的精确值也可以,因此该值本身只需计算一次 这是我的模型: class Item(db.Model): last_fetch = db.Column(db.DateTime) def refresh(self): s

我正在用SQLAlchemy开发一个应用程序,遇到了一些问题。我希望在查询返回的所有模型上运行一个方法,并在单个SQL查询中实现所有这些,同时保持ORM提供的可读性

该方法非常简单,不依赖任何外部数据,也不进行任何查询。如果批量更新中的所有模型使用相同的精确值也可以,因此该值本身只需计算一次

这是我的模型:

class Item(db.Model):
    last_fetch = db.Column(db.DateTime)

    def refresh(self):
        self.last_fetch = datetime.utcnow()
我想对查询返回的所有模型调用
refresh()
函数-为了示例起见,让我们假设它是
Item.query.all()

我可以遍历它们并在每个模型上运行该方法,但这将为每个模型运行单独的查询:

items = Item.query.all()

for item in items:
    item.refresh()
或者我可以执行以下操作,但是现在我已经将我的
refresh()
逻辑从模型移动到了只调用该方法的代码中:

items = Item.query.all()

items.update({Item.last_fetch: datetime.utcnow()})
有更好的解决办法吗?一种在模型上定义“智能”方法的方法,该方法允许ORM批量运行它,同时仍然保持它是一种模型方法


注意。

因为SQLAlchemy不使用
\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
而使用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
您可以在您的模型上覆盖
\uuuuu new\uuuuu
,或者尝试查看中介绍的
@orm.recostructor
装饰器是否有效

使用重建器:

class Item(db.Model):
last_fetch = db.Column(db.DateTime)

@orm.reconstructor
def set_last_fetch_on_load(self):
    self.last_fetch = datetime.datetime.now()
覆盖
\uuuu新建\uuuuu

class Item(db.Model):
last_fetch = db.Column(db.DateTime)

def __new__(cls, *args, **kwargs):
    obj = object.__new__(cls, *args, **kwargs)
    obj.last_fetch = datetime.datetime.now()
    return obj

注意:尚未对其进行测试。

这不会导致每次实例化模型时都重置日期吗?那不是我想要的。我希望能够手动触发它(我只在特定条件下调用它)。它将在每次查询项目时更新日期。所以每次你从数据库中取出它们。如果你只需要在特定的条件下做这件事,我认为你所写的会起作用,你可以忽略我的答案。