gpt4 book ai didi

Python MySQL 连接器 - 使用 fetchone 时发现未读结果

转载 作者:行者123 更新时间:2023-11-29 17:49:16 25 4
gpt4 key购买 nike

我正在将 JSON 数据插入 MySQL 数据库

我正在解析 JSON,然后使用 python 连接器将其插入 MySQL 数据库

通过试用,发现错误与这段代码有关

for steps in result['routes'][0]['legs'][0]['steps']:
query = ('SELECT leg_no FROM leg_data WHERE travel_mode = %s AND Orig_lat = %s AND Orig_lng = %s AND Dest_lat = %s AND Dest_lng = %s AND time_stamp = %s')
if steps['travel_mode'] == "pub_tran":
travel_mode = steps['travel_mode']
Orig_lat = steps['var_1']['dep']['lat']
Orig_lng = steps['var_1']['dep']['lng']
Dest_lat = steps['var_1']['arr']['lat']
Dest_lng = steps['var_1']['arr']['lng']
time_stamp = leg['_sent_time_stamp']
if steps['travel_mode'] =="a_pied":
query = ('SELECT leg_no FROM leg_data WHERE travel_mode = %s AND Orig_lat = %s AND Orig_lng = %s AND Dest_lat = %s AND Dest_lng = %s AND time_stamp = %s')
travel_mode = steps['travel_mode']
Orig_lat = steps['var_2']['lat']
Orig_lng = steps['var_2']['lng']
Dest_lat = steps['var_2']['lat']
Dest_lng = steps['var_2']['lng']
time_stamp = leg['_sent_time_stamp']
cursor.execute(query,(travel_mode, Orig_lat, Orig_lng, Dest_lat, Dest_lng, time_stamp))
leg_no = cursor.fetchone()[0]
print(leg_no)

我已经插入了更高级别的详细信息,现在正在搜索数据库以将此较低级别的信息与其父信息相关联。找到这个唯一值的唯一方法是通过带有时间戳的起点和目的地坐标进行搜索。我相信逻辑是合理的,并且通过在本节之后立即打印leg_no,我可以看到第一次检查时出现的值是正确的

但是,当添加到代码的其余部分时,它会导致使用光标插入更多数据的后续部分失败并出现此错误 -

    raise errors.InternalError("Unread result found.")
mysql.connector.errors.InternalError: Unread result found.

该问题似乎类似于 MySQL Unread Result with Python

查询是否太复杂需要拆分或者是否存在其他问题?

如果查询确实太复杂,有人可以建议如何最好地拆分它吗?

编辑根据@Gord的帮助,我尝试转储任何未读结果

cursor.execute(query,(leg_travel_mode, leg_Orig_lat, leg_Orig_lng, leg_Dest_lat, leg_Dest_lng))
leg_no = cursor.fetchone()[0]
try:
cursor.fetchall()
except mysql.connector.errors.InterfaceError as ie:
if ie.msg == 'No result set to fetch from.':
pass
else:
raise
cursor.execute(query,(leg_travel_mode, leg_Orig_lat, leg_Orig_lng, leg_Dest_lat, leg_Dest_lng, time_stamp))

但是,我还是明白

raise errors.InternalError("Unread result found.")
mysql.connector.errors.InternalError: Unread result found.
[Finished in 3.3s with exit code 1]

抓伤头

编辑2 - 当我打印 ie.msg 时,我得到 -

No result set to fetch from

最佳答案

所需要的只是 buffered to be set to true!

cursor = cnx.cursor(buffered=True)

原因是,如果没有缓冲游标,结果会“延迟”加载,这意味着“fetchone”实际上只从查询的完整结果集中获取一行。当您再次使用相同的游标时,它会提示您仍然有 n-1 个结果(其中 n 是结果集数量)等待获取。但是,当您使用缓冲游标时,连接器会在幕后获取所有行,并且您只需从连接器中获取一行,这样 mysql 数据库就不会提示。

关于Python MySQL 连接器 - 使用 fetchone 时发现未读结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49528905/

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