【发布时间】:2010-06-03 03:14:13
【问题描述】:
我使用 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
半径、纬度和经度的值并不重要,但它们是在脚本执行时定义的。困扰我的是上面代码的 sn-p 没有返回结果;本质上意味着执行查询的方式很不稳定。我执行了 SQL 查询(包括具有实际值的设置变量,它返回了正确数量的结果)。
如果我将查询修改为简单的 SELECT FROM 查询 (SELECT * FROM poi_table),它会返回结果。这是怎么回事?
编辑:括号内的封装Haversine公式计算
【问题讨论】: