Flask/SQLAlchemy如何对字段值取对数并绑定数学函数到sqlalchemy.sql.func
解决方案
错误原因
sqlalchemy.sql.func的作用是直接映射数据库原生的SQL函数,不需要绑定Python的math模块,你原有代码中func.math.log的写法是错误的,相当于尝试调用数据库中不存在的math.log函数,因此执行失败。
修改方法
你可以直接通过func调用数据库支持的对数函数即可,不同对数需求的写法如下:
- 自然对数(底数为e):调用
func.ln(),适配绝大多数数据库的原生自然对数函数 - 底数为10的常用对数:调用
func.log10() - 自定义底数的对数:调用
func.log(底数, 字段),适配支持自定义底数对数的数据库
修正后的代码示例
from sqlalchemy.sql import func def mul_2(user): return user.score * 2 def _log(user): # 示例为自然对数,可根据需求替换为上述其他对数函数 return func.ln(user.score) # 正常运行 User.query.update({User.score: mul_2(User)}) # 现在可正常执行 User.query.update({User.score: _log(User)})
注意事项
对数运算仅支持正整数,建议执行更新前过滤掉score小于等于0的行,避免运行报错:
User.query.filter(User.score > 0).update({User.score: _log(User)})
内容的提问来源于stack exchange,提问作者irahorecka
相关产品推荐
相关产品推荐

