2012-02-16 12 views
11

MySQLデータベースにデータを読み書きするPython用MySQLdbモジュール(Windows Python 2.7用のv1.2.3プリコンパイル済みバイナリ) 。一度接続が開かれると、その接続を使用して、同じ接続でデータベースに加えられた変更を観察できますが、別の接続がPythonで行われたか、 MySQLコマンドラインクライアント。私がPythonを使用して更新を行っている場合は、接続上でcommit()コマンドを実行していることに注意してください。 1つのVARCHAR列でテストテーブルに新しいレコードを挿入し、プログラムの変更がコミットされた後でも、MySQL-python接続で別の接続で行われたデータベースへの変更が表示されない

例:一定のレコード数を印刷し終わるプログラムの

import MySQLdb 

conn = MySQLdb.connect("localhost", "test", "test", "test") 
c = conn.cursor() 
c.execute("INSERT INTO test VALUES(%s)", ("Test",)) 
conn.commit() 
c.close() 
conn.close() 

例(代わりに最新のレコードを印刷しますカウント)。私は、スクリプトを強制終了して再実行するか、またはSELECTステートメントを実行するたびに新しい接続を開くことによって、カウントを更新することができました。

import MySQLdb 

conn = MySQLdb.connect("localhost", "test", "test", "test") 

while True: 
    input = raw_input("Enter anything: ") 
    if input == "exit": 
     break 

    c = conn.cursor() 
    c.execute("SELECT COUNT(*) FROM test") 
    res = c.fetchone()[0] 
    c.close() 

    print("Number of records: %d" % res) 

答えて

5

cursorの定義は、その変更までのデータを格納するであるこの

import MySQLdb 
import time 

from MySQLdb.cursors import SSCursor 
conn = MySQLdb.connect("localhost", "test", "test", "test") 


while True: 
    input = raw_input("Enter anything: ") 
    if input == "exit": 
     break 
    c = conn.cursor() 
    conn.begin() 
    c.execute("SELECT COUNT(*) FROM test") 
    res = c.fetchone()[0] 
    #c.commit() 
    c.close() 

    print("Number of records: %d" % res) 

を試してみてください。したがって、カーソルに指示を与えるには、beginまたはcommit接続してください。これにより、データベースから新しいデータを読み取らなければならないことをカーソルに通知します。

これがあなたの質問を解決します。

あなたの質問から新しいことを学ぶこともできます:)。

+2

'deprecationWarning:begin()は標準ではなく、1.3で削除されます。 ' –

+1

' conn.begin() 'にコメントし、' conn.commit() 'のコメントを外します。それも動作します。 – Nilesh

関連する問題