在Sqlite SELECT语句中使用参数

时间:2017-05-29 05:59:41

标签: python sqlite select r-tree

我正在使用SQlite和Python构建我的第一个烧瓶应用程序。

我使用下面提到的方法使用索引RTree将从Arduino接收到的GPS坐标存储到SQlite数据库中 http://janmatuschek.de/LatitudeLongitudeBoundingCoordinates#UsingIndex

Sqlite虚拟表如下所示:

Node_ID |纬度|经度

以下查询正在尝试获取带有给定raduis(KM)的Node_ids。

此处的列名称:LATITUDE和LONGITUDE。

变量是:lat,lng,boundary(包含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 raduis的DB中,但当我执行SELECT语句时,我总是将匹配的行数计为“0”。 但该程序不会引发任何错误。

我在SELECT语句参数化方面找不到多少。

我使用SELECT语句的方式是否错误? 如何在SQlite中使用prepareStatement?

1 个答案:

答案 0 :(得分:1)

首先检查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))