【发布时间】:2021-09-28 03:39:11
【问题描述】:
我正在使用 Flask / SQLAlchemy ORM,我想做的是有选择地对 sqlalchemy.orm.attributes.InstrumentedAttribute 的实例执行数学计算。像这样的等式类似于User.query.update({User.score: User.points / User.time})。
例如,假设我的 PostgreSQL 数据库中有 > 100,000 个条目,如下所示:User.points --> [12, 3, 0, ..., 45]; User.time --> [102, 23, 45, ..., 12](请注意User.points 中的0)。在下面的示例中,我会收到一个异常,指出我不能取 0 的对数。
from sqlalchemy import func
from project.models import User
User.query.update({User.score: func.log(User.points / User.time)})
我想有选择地选择要在哪个InstrumentAttribute 上执行计算。我可以使用User.query.filter 过滤查询,但是如果您愿意,我如何将其转换为过滤模型而不进行迭代计算?
【问题讨论】:
-
为什么不能使用
.where(User.points > 0)之类的东西? -
嗯,我认为这行不通,除非我有不同的解释:
User.query.update({User.score: func.log(User.points / User.time)}).where(User.points != 0)
标签: python python-3.x flask sqlalchemy