[解決済み】Python MySQLコネクタ - fetchoneを使用すると未読の結果が見つかる
質問
MySQLデータベースにJSONデータを挿入しています。
JSONをパースして、Pythonコネクタを使ってMySQL dbに挿入しているところです。
試行錯誤の結果、このコードにエラーがあることがわかりました。
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.
と似たような問題だと思われます。 Pythonを使ったMySQLの未読結果
クエリが複雑すぎて分割が必要なのか、それとも別の問題があるのでしょうか?
クエリが複雑すぎる場合、どのように分割するのがベストなのか、どなたかアドバイスをお願いします。
EDIT @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]
頭を掻く
EDIT 2 - ie.msgを印刷すると、-が表示されます。
No result set to fetch from
解決方法は?
必要なのは
buffered
を true に設定する必要があります!
cursor = cnx.cursor(buffered=True)
つまり、"fetchone"は実際には問い合わせの全結果セットから1行しか取り出さないということです。同じカーソルを再度使用する場合、フェッチ待ちの結果がまだn-1個(nは結果集合の量)あることを訴えます。しかし、バッファードカーソルを使用すると、コネクタは裏ですべての行をフェッチし、あなたはコネクタから1行を取得するだけなので、mysql dbから文句を言われることはないでしょう。
関連
-
ピロウズ画像色処理の具体的な活用方法
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
Python入門 openを使ったファイルの読み書きの方法
-
[解決済み] データ型が理解できない
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み] 'int'オブジェクトに'__getitem__'属性がない。
-
[解決済み】pip install mysql-python は EnvironmentError: mysql_config not found で失敗します。
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MySQLでコマンドラインを使用してユーザーアカウントのリストを取得するにはどうすればよいですか?
-
[解決済み] と'is'のどちらかを使って文字列を比較すると、異なる結果になることがあるのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
Python関数の高度な応用を解説
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
Python入門 openを使ったファイルの読み書きの方法
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】ValueError: xとyは同じサイズでなければならない