SQLAlchemy报错:abs()无法处理BinaryExpression类型的原因问询
问题原因与解决方法
问题出在哪
你用了Python原生的abs()函数,但Chart.jupiter_lon - Chart.h5_lon返回的是SQLAlchemy的BinaryExpression对象——这是用来构建SQL表达式的中间结构,不是普通的Python数值,所以原生abs()无法处理它。
正确写法
要调用数据库的ABS函数,得用SQLAlchemy提供的func.abs(),步骤如下:
- 先导入
func:
from sqlalchemy import func
- 修改查询语句:
db.session.query(Chart).filter(func.abs(Chart.jupiter_lon - Chart.h5_lon) < 0.88).all()
这样func.abs()会生成SQL中的ABS()函数调用,把差值的绝对值计算逻辑交给数据库执行,就能正确匹配你原本的SQL语句逻辑了。
内容的提问来源于stack exchange,提问作者pepazdepa
相关产品推荐
相关产品推荐

