0

ラズベリー 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
4

1 に答える 1

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"]))
    con.commit()
    return
于 2012-09-22T21:38:29.800 に答える