我正在尝试向网络应用添加功能,其中当通过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
任何帮助将不胜感激。
答案 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....