python - 在 Sqlite SELECT 语句中使用参数

标签 python sqlite select r-tree

我正在使用 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/

相关文章:

mysql - PDO UNION 函数仅处理第一个 SELECT 语句

python - Gspread,PythonAnywhere : "OSError: [Errno 101] Network is unreachable" - Trying to Connect to Google Sheets

python - 在 Python 中用色标可视化位置的移动速度

Android SQLite 递增列值

sqlite - 访问 firefox cookies.sqlite 错误

r - 使用 R 选择指定列之后的所有列

Python、MySQL : Getting Null Inserts, 但 print() 正在给出值,SQL 是否有效?

python - 永远不会运行完的正则表达式

javascript - javascript中对象以数组开头是什么意思

mysql - SQL SELECT 后跟 UPDATE