ラズベリー pi で python/mysqldb を実行中に問題が発生しました。これは非常に単純なスクリプトなので、何が欠けているのかわかりません。「SELECT * FROM...」は問題なく実行されますが、テーブルを新しい値で更新できないようです。スクリプトはエラーをスローせずに実行されますが、ctrl-C を押すと、次のようになります。
Exception _mysql_exceptions.ProgrammingError: (2014、「コマンドが同期していません。現在、このコマンドを実行できません」) 0x19dfd90 の MySQLdb.cursors.DictCursor オブジェクトのバインドされたメソッド DictCursor.__del で
これが私のスクリプトです:
dhost = "localhost"
duser = "root"
dname = "rpi"
dpass = "datPassword"
import MySQLdb
try:
con = MySQLdb.connect(dhost,duser,dpass,dname);
cur = con.cursor(MySQLdb.cursors.DictCursor)
except MySQLdb.Error, e:
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)
def websiteToSensor():
cur.execute("SELECT * FROM homeauto WHERE changedby = 'website'")
rows = cur.fetchall()
for row in rows:
cur.execute("UPDATE homeauto SET changedby = 'script' WHERE id = '%s'",(row["id"]))
return
while True:
websiteToSensor()
私のテーブルが更新されない理由について誰かが考えていますか? ありがとう!
***編集:解決策* **
Martijn Pieters のおかげで、これが私の新しい websiteToSensor() コードです。
def websiteToSensor():
cur = con.cursor(MySQLdb.cursors.DictCursor)
cur.execute("SELECT * FROM homeauto WHERE changedby = 'website'")
rows = cur.fetchall()
num = int(cur.rowcount)
if num > 0:
for row in rows:
cur.execute("UPDATE homeauto SET changedby = 'script' WHERE id = '%s'",(row["id"]))
con.commit()
cur.close()
con.commit()
else:
cur.close()
con.commit()
return