1

MySQLdbでエラーチェックを行う方法に関する情報を見つけるのに問題があります。MySQLデータベースに対して単純な更新コマンドを実行しようとしましたが、機能していません。用語をどのように変更したり、送信する変数のタイプに関係なく。

これが私の(コメントアウトされた)試みのいくつかです:

timeid = twitseek['max_id']
            #timeup = "UPDATE `timeid` set `timestamp`='" + str(timeid) + "';"
            #print timeup
            #c.execute(timeup)

            #timeup = "UPDATE timeid SET timestamp=\"" + str(timeid) + "\"";
            #timeup = "UPDATE timeid set timestamp = '500';"
            timeup = 500
            c.execute("""UPDATE timeid SET timestamp = %d;""", timeup)
            #c.execute(timeup)

timeidの値をテーブルのtimestamp列の最初の値(または任意の値)にアップロードするだけですtimeid

私がしていることは何もうまくいかないようで、私は文字通り何時間もここに座って数え切れないほどの反復を試みてきました。

4

1 に答える 1

1

.commit()変更をコミットするための接続オブジェクトへの必須の呼び出しが欠落しているようです。

# Your cursor is c
# We don't see your connection object, but assuming it is conn...
c.execute("""UPDATE timeid SET timestamp = %d;""", timeup)
conn.commit()

上記の方法では有効なSQLが生成されますが、この方法ではプリペアドステートメントのセキュリティ上の利点は得られません。パラメータを渡す適切な方法は、を使用し%s、パラメータのタプルを渡すことです。

c.execute("UPDATE timeid SET timestamp = %s;", (timeup,))
conn.commit()

MySQLdb FAQから:

1.2.0以降、MySQLdbは、DB-API標準(PEP-249)で要求されているように、デフォルトで自動コミットを無効にします。InnoDBテーブルまたは他のタイプのトランザクションテーブルタイプを使用している場合は、接続を閉じる前にconnection.commit()を実行する必要があります。そうしないと、変更がデータベースに書き込まれません。

逆に、connection.rollback()を使用して、最後のコミット以降に行った変更を破棄することもできます。

エラーチェックに関する限り、失敗した接続または構文的に無効なクエリは例外をスローします。したがってtry/except、Pythonで一般的なようにそれをラップする必要があります。

于 2012-07-14T21:12:59.857 に答える