【发布时间】:2023-03-16 16:05:01
【问题描述】:
我正在使用 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 批量运行它,同时仍将其保留为模型方法?
问候。
【问题讨论】:
标签: python sqlalchemy