我正在使用 SQlite 和 Python 构建我的第一个 Flask 应用程序。
我使用索引 RTree 将从 Arduino 接收到的 GPS 坐标存储到 SQlite 数据库中,使用下面提到的方法 http://janmatuschek.de/LatitudeLongitudeBoundingCoordinates#UsingIndex
Sqlite 虚拟表如下所示:
节点 ID |纬度 |经度
下面的查询尝试获取给定半径(KM)内的 Node_ids。
此处的列名称:纬度和经度。
变量为:lat,lng,boundaries(包含lat_min,lat_max,lg_min)和raduis。
"""
SELECT * FROM Userdata WHERE (LATITUDE >={lt_min} AND LATITUDE <= {lt_max}) AND (LONGITUDE >= {lg_min} AND LONGITUDE <= {lg_min})
AND acos(sin({lt}) * sin(LATITUDE) + cos({lt}) * cos(LATITUDE) * cos(LONGITUDE-(-{lg}))) <={dist}
""".format(lt=lat,lt_min=boundaries[0],lt_max=boundaries[1],
lg=lng,lg_min=boundaries[2],lg_max=boundaries[3],
dist=radius)
虽然我在数据库中存储了足够的 1KM 半径坐标,但当我执行 SELECT 语句时,我得到的匹配行计数始终为“0”。 但程序不会抛出任何错误。
我找不到太多关于参数化 SELECT 语句的信息。
我使用SELECT语句的方式是否错误? 如何使用 SQlite 的prepareStatement?
最佳答案
首先检查documentation .
这是一个例子:
cursor.execute(
"""
SELECT * FROM Userdata WHERE (LATITUDE >= ? AND LATITUDE <= ?)
AND (LONGITUDE >= ? AND LONGITUDE <= ?)
AND acos(sin(?) * sin(LATITUDE) + cos(?) * cos(LATITUDE) *
cos(LONGITUDE-(-?))) <=?
""", (lat,boundaries[0],boundaries[1],
lng,boundaries[2],boundaries[3], radius))
关于python - 在 Sqlite SELECT 语句中使用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44235514/