[PYTHON] Python MySQL 커넥터 - fetchone을 사용할 때 읽지 않은 결과가 있습니다.
PYTHONPython MySQL 커넥터 - fetchone을 사용할 때 읽지 않은 결과가 있습니다.
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)
상위 수준의 세부 정보를 삽입하고이 하위 수준의 정보를 부모와 연결하도록 데이터베이스를 검색하고 있습니다. 이 고유 한 값을 찾는 유일한 방법은 time_stamp를 사용하여 출발지 및 목적지 좌표를 검색하는 것입니다. 논리가 확실하고이 절의 직후에 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
해결법
-
==============================
1.필요한 모든 것은 버퍼링 된 것이 true로 설정되었습니다.
필요한 모든 것은 버퍼링 된 것이 true로 설정되었습니다.
cursor = cnx.cursor(buffered=True)
-
==============================
2.문제를 재현 할 수있었습니다. MySQL Connector / Python은 여러 행을 가져 와서 커서를 닫거나 다른 항목을 검색하기 전에 모든 행을 가져 오지 않으면 분명히 좋아하지 않습니다. 예를 들어
문제를 재현 할 수있었습니다. MySQL Connector / Python은 여러 행을 가져 와서 커서를 닫거나 다른 항목을 검색하기 전에 모든 행을 가져 오지 않으면 분명히 좋아하지 않습니다. 예를 들어
import mysql.connector cnxn = mysql.connector.connect( host='127.0.0.1', user='root', password='whatever', database='mydb') crsr = cnxn.cursor() crsr.execute("DROP TABLE IF EXISTS pytest") crsr.execute(""" CREATE TABLE pytest ( id INT(11) NOT NULL AUTO_INCREMENT, firstname VARCHAR(20), PRIMARY KEY (id) ) """) crsr.execute("INSERT INTO pytest (firstname) VALUES ('Gord')") crsr.execute("INSERT INTO pytest (firstname) VALUES ('Anne')") cnxn.commit() crsr.execute("SELECT firstname FROM pytest") fname = crsr.fetchone()[0] print(fname) crsr.execute("SELECT firstname FROM pytest") # InternalError: Unread result found.
한 행만 예상 (또는 관심)하면 쿼리에 LIMIT을 넣을 수 있습니다.
crsr.execute("SELECT firstname FROM pytest LIMIT 0, 1") fname = crsr.fetchone()[0] print(fname) crsr.execute("SELECT firstname FROM pytest") # OK now
또는 fetchall ()을 사용하여 검색 한 행으로 작업을 완료 한 후 읽지 않은 결과를 제거 할 수 있습니다.
crsr.execute("SELECT firstname FROM pytest") fname = crsr.fetchone()[0] print(fname) try: crsr.fetchall() # fetch (and discard) remaining rows except mysql.connector.errors.InterfaceError as ie: if ie.msg == 'No result set to fetch from.': # no problem, we were just at the end of the result set pass else: raise crsr.execute("SELECT firstname FROM pytest") # OK now
from https://stackoverflow.com/questions/29772337/python-mysql-connector-unread-result-found-when-using-fetchone by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] flask.ext를 가져 오면 ModuleNotFoundError가 발생합니다. (0) | 2018.10.30 |
---|---|
[PYTHON] Matplotlib Plot Dashed Circles (plt.scatter 대신 plt.plot 사용) (0) | 2018.10.30 |
[PYTHON] 특별한 방법에 대한 파이썬 문서는 어디에 있습니까? (__init__, __new__, __len__, ...) (0) | 2018.10.30 |
[PYTHON] Python AttributeError : 'module'객체에 'SSL_ST_INIT'속성이 없습니다. (0) | 2018.10.30 |
[PYTHON] Sphinx autodoc-skip-member를 내 함수에 연결하십시오. (0) | 2018.10.30 |