私はMySQLデータベースと相互作用するPythonでプログラムを書いています。SQLクエリにはMySQLdbを使用します。問題はNoneを返すことですが、データベースブラウザを使用すると、その行が存在するfetchone()
ことがわかります。このコード:
query = "SELECT * FROM revision WHERE rev_id=%s;"
cursor.execute(query % revision_id)
row = cursor.fetchone()
if row == None:
raise Exception("there isn't revision with id %s" % revision_id)
ここで何が起こっているのかわかりません。何か案は?
編集:わかりました、場合によっては機能する場合もありますが、機能しない場合でも、行はテーブルに存在します。カーソルオブジェクトを関数に渡していますが、上記のコードは関数内にあります。問題はこのカーソルオブジェクトに関連しています。問題は、関数への引数としてカーソルを渡すことでしょうか?どうすればテストできますか?
EDIT2:はい、問題は、カーソルを数回使用した後、カーソルが機能しないことです。他のプログラムがDBに接続しているのか、私が何か間違ったことをしているのか。DBから情報を取得する関数をwhile
呼び出すループがあります。何度か繰り返した後、それは再び機能しません。while
ループが機能している間にDBに書き込む別のプログラムがあります。