0

こんにちは私はAmazonRDSマシンに接続し、新しいエントリをチェックするPythonスクリプトを持っています。私のスクリプトはローカルホストで完全に機能します。ただし、RDSでは新しいエントリは検出されません。スクリプトをキャンセルして再度実行すると、新しいエントリが取得されます。テストのために私はこのようにそれを試しました

cont = MySQLdb.connect("localhost","root","password","DB") 
cursor = cont.cursor() 
for i in range(0, 100):
    cursor.execute("Select count(*) from box")
    A = cursor.fetchone()
    print A 

このプロセス中に新しいエントリを追加すると、新しいエントリは検出されませんが、接続を閉じて再度実行すると、新しいエントリが取得されます。なぜこれが0のキャッシュをチェックしたのですか。他に何が欠けていますか。

4

2 に答える 2

0

これはMySQLコマンドラインクライアントでも発生します。

私の理解(このURLにリンクしている他の人々から)は、PythonのAPIがサイレントにトランザクションを作成することが多いということです:http ://www.python.org/dev/peps/pep-0249/

それが当てはまる場合、別のトランザクションが行を追加した後でも、カーソルは一貫したバージョンのデータを見ています。cursor.rollback()ループ内でを実行しforて、が実行されている暗黙のトランザクションを停止することができSELECTます。

于 2011-05-23T16:30:19.093 に答える
0

私はこれに対する解決策を得ました、それはMysqlの分離レベルによるものです、私がしなければならなかったのは

Set the default transaction isolation level transaction-isolation = READ-COMMITTED

そして、私はこれにDjangoを使用していますが、これをdjangoデータベース設定に追加する必要がありました

'OPTIONS': {
                "init_command": "SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED"
                }
于 2011-06-24T07:37:37.350 に答える