これはおそらくです。本当にのばかげた問題ですが、私は数時間それを見ていて、それを解決することはできません。Pythonアップデートカーソルの問題 - %s記号のエラー?
は、だからここに行く:
def updateEntryAsYoutubeProcessing(self,conn,id):
cursor = conn.cursor()
try:
numberAffected = cursor.execute("update new_files set is_youtube = 1 where id=%s",(id))
conn.commit()
except MySQLdb.IntegrityError,e:
logging.warn("update failed with error \n\t%d:%s",e.args[0],e.args[1])
raise
finally:
cursor.close()
このコード常にエラーで結果:
Traceback (most recent call last):
File "mydaemon.py", line 28, in loopForEachFileInDirectory
self.updateEntryAsYoutubeProcessing(conn,id)
File "mydaemon.py", line 80, in updateEntryAsYoutubeProcessing
numberAffected = cursor.execute("update new_files set is_youtube = 1 where id=%s",(id))
File "/usr/lib/pymodules/python2.6/MySQLdb/cursors.py", line 166, in execute
self.errorhandler(self, exc, value)
File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 35, in defaulterrorhandler
raise errorclass, errorvalue
ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s' at line 1")
私は二重引用符、トリプル二重引用符で自分のコードを試してみた、として定義されたSQL変数と実行に配置、私が考えることができるすべて。
何が欠けていますか?
私はデータベース上でsqlを試しましたが、正常に動作しました(%sを値obviに置き換えて)。
編集: 問題は、私はでした。実際にはというIDはありませんでした。私が持っていた次の問題は、回答に記されているように(ありがとう!)、タプルが(id)
を(id,)
にする必要があったからです。
タプルであるため、「非型」エラーがスローされます。ありがとうございます、明らかに私はタイプルを使用するようにコードを修正しています(また、データベースにNoneを挿入しないでください)
あなたは奇妙なことを知っていますか? 1分に4つの答えがあるときは、そのうちの1つを試してみて、戻ってきて、ほぼすべて*答えが消えてしまった、正解の人がいなくなった、他の誰かが彼を置き換えた - 。私はうんざりしている、あなたは正しい、そして今は夕食の時間だ – bharal