2012-02-16 9 views
11

Sto usando il modulo MySQLdb per Python (binario precompilato v1.2.3 per Windows Python 2.7) per leggere e scrivere dati in un database MySQL . Una volta che una connessione è aperta, posso usare quella connessione per osservare le modifiche apportate al database sulla stessa connessione, ma non vedere le modifiche apportate usando un'altra connessione, indipendentemente dal fatto che l'altra connessione sia fatta in Python o che ci sia una modifica fatta usando il client della riga di comando MySQL. Nel caso in cui sto facendo aggiornamenti usando Python, si noti che sto eseguendo il comando commit() sulla connessione.La connessione MySQL-python non vede le modifiche apportate al database su un'altra connessione anche dopo il commit della modifica

Esempio di programma che inserisce nuovi record in una tabella di test con una colonna VARCHAR:

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() 

Esempio di programma che finisce per stampare un conteggio di record costante (invece di stampare più record di up-to-data contare). Sono stato in grado di aggiornare il conteggio uccidendo e rieseguendo lo script o aprendo una nuova connessione ogni volta che viene eseguita l'istruzione 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) 

risposta

5

Prova questa

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) 

La definizione del cursor si sarà memorizzare i dati fino al suo cambiamento. Quindi devi dare l'indicazione al cursore per begin ing o commit per la tua connessione. Questo informerà il cursore che devi leggere i nuovi dati dal database.

Spero che questo risolva la tua richiesta.

Impariamo anche cose nuove dalla tua domanda :).

+2

'DeprecationWarning: begin() è non standard e verrà rimosso in 1.3' –

+1

Commentare' conn.begin() 'e rimuovere il commento' conn.commit() '. Funzionerà anche. – Nilesh

Problemi correlati