gpt4 book ai didi

Python 和 MySQLdb

转载 作者:可可西里 更新时间:2023-11-01 08:01:09 27 4
gpt4 key购买 nike

我正在使用 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 公式计算

最佳答案

据我所知,您不能使用 execute() 运行多个语句。
但是,您可以让 MySQLdb 处理值替换。

请注意,有两个参数被传递给 execute()
此外,仅运行 execute() 实际上不会返回任何结果。
您需要使用 fetchone()fetchmany()fetchall()

cursor.execute('''
SELECT *,
6371*1000 * acos(cos(radians(%s)) *
cos(radians(lat)) * cos(radians(lon) - radians(%s)) +
sin(radians(%s)) * sin(radians(lat))) as distance
FROM
poi_table
WHERE distance < %s
ORDER BY distance ASC
LIMIT 0, 50''', (latitude, longitude, latitude, radius,))
results = cursor.fetchall()
print results

关于Python 和 MySQLdb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2963114/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com