我正在使用Python脚本(使用MySQLdb模块)执行以下查询。
conn=MySQLdb.connect (host = "localhost", user = "root",passwd = "<password>",db = "test")
cursor = conn.cursor ()
preamble='set @radius=%s; set @o_lat=%s; set @o_lon=%s; '%(radius,latitude,longitude)
query='SELECT *, (6371*1000 * acos(cos(radians(@o_lat)) * cos(radians(lat)) * cos(radians(lon) - radians(@o_lon)) + sin(radians(@o_lat)) * sin(radians(lat))) as distance FROM poi_table HAVING distance < @radius ORDER BY distance ASC LIMIT 0, 50)'
complete_query=preamble+query
results=cursor.execute (complete_query)
print results
半径、纬度和经度的值并不重要,但在脚本执行时它们被定义。让我困扰的是上面的代码片段没有返回结果,这意味着查询的执行方式有问题。我执行了SQL查询(包括实际值的设置变量),并返回了正确数量的结果。
如果我修改查询为一个简单的SELECT FROM查询(
SELECT * FROM poi_table
),它会返回结果。这里发生了什么?编辑:将Haversine公式计算封装在括号内。