在SQlAlchemy中使用大于(> =)或小于(< =)的运算符

时间:2017-09-28 00:56:29

标签: python sqlalchemy

我正在尝试向网络应用添加功能,其中当通过JavaScript和SQLAlchemy拖动地图时坐标将自动更新。但是我的更新路由的数据库查询出错了。这是我的询问。

if sw_lng <= ne_lng:

# doesn't cross the antimeridian
rows = City.query.filter(sw_lat <= City.latitude and City.latitude <= ne_lat and (sw_lng <= City.longitude and City.longitude <= ne_lng)
                         ).group_by(City.country_code, City.city_name, City.region
                                    ).order_by(func.random()).limit(10)

以下是相关的错误消息:

raise TypeError("Boolean value of this clause is not defined")

TypeError: Boolean value of this clause is not defined

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

不要使用and来组合过滤器,将每个过滤器表达式作为单独的参数传递(默认行为是将它们视为and - 一起编辑)。使用and本身正在尝试执行本地布尔测试(Python,有充分理由,不允许任何形式的重载会改变and的含义),但SQLAlchemy正在使用测试作为特殊目的对象,它在懒惰的情况下进行评估,以便在查询调度时生成SQL查询(将工作推送到数据库服务器)。你想要:

rows = City.query.filter(sw_lat <= City.latitude, City.latitude <= ne_lat,
                         sw_lng <= City.longitude, City.longitude <= ne_lng)...cont....