在Sqlite SELECT statemens中使用参数

2024-06-17 18:08:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

Sqlite虚拟表如下所示:

节点编号|纬度|经度

下面的查询正在尝试获取具有给定raduis(KMs)的节点_id。在

这里的列名:纬度和经度。在

变量包括:lat、lng、边界(包括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中存储了足够的坐标,但当我执行SELECT语句时,我得到的匹配行数始终为“0”。 但程序不会抛出任何错误。在

我找不到太多关于参数化SELECT语句的信息。在

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


Tags: andltsqlite节点语句cosminselect
1条回答
网友
1楼 · 发布于 2024-06-17 18:08:31

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

相关问题 更多 >