[Python] MySQLdb connect non aggiorna i dati sui client

Giuseppe Costanzi giuseppecostanzi a gmail.com
Mer 2 Mar 2016 14:57:05 CET


2016-03-02 14:29 GMT+01:00 m <m a pavis.biodec.com>:
> * Carlo Miron (carlo a golang.it) [160302 14:21]:
>>
>>
>>> sto migrando un' applicazione da sqlite a mysql, funziona tutto tranne
>>> che
>>> per il fatto che se effettuo degli insert o update da un client queste
>>> sono visibili
>>> solo al client che esegue queste modifiche, mentre su tutti gli altri
>>> devo chiudere l'applicazione e riavviarla.
>>> Controllando sul server, le tabelle si aggiornano correttamente.
>>> E' come se gli altri client vedessero le tabelle del server solo quando
>>> si
>>> apre la connessione.
>>
>>
>
> secondo me perché stanno all'interno di una transazione, e non la
> chiudono mai, e il server sta andando con un livello di isolamento
> 'repeatable read' --- quindi gli fa vedere sempre lo stesso 'snapshot'
> del database
>
> se è quello (wild guess):
> - puoi o portare il livello di isolamento a 'read committed'
>   (sconsigliato)
> - o cambiare l'applicazione in modo che chiuda la transazione (soluzione
>   corretta)
>
> per inciso, se la diagnosi è corretta, avresti quel comportamento anche
> con postgresql o altri db

la diagnosi è corretta.

la cura, che non è farina del mio sacco, sarebbe la seguente...non
credo ti piaccia :(

cur = self.con.cursor()
cur.execute("SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED")
cur.execute("SELECT @@session.tx_isolation")

cur.execute(sql,args)

         if fetch == True:
                rs =  cur.fetchall()
            else:
                rs =  cur.fetchone()

cur.execute("SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ")
 cur.execute("SELECT @@session.tx_isolation")

cur.close()
return rs

p.s.
concordo anche con l'approfondita analisi di carlo.... ;)

giuseppe


>
> --
>  .*.                            finelli
>  /V\
> (/ \) --------------------------------------------------------------
> (   )       Linux: Friends dont let friends use Piccolosoffice
> ^^-^^ --------------------------------------------------------------
>
> First shalt thou take out the Holy Pin. Then, shalt thou count to three,
> no more, no less. Three shalt be the number thou shalt count, and the
> number of the counting shalt be three. Four shalt thou not count, nor
> either count thou two, excepting that thou then proceed to three. Five
> is right out. Once the number three, being the third number, be reached,
> then lobbest thou thy Holy Hand Grenade of Antioch towards thou foe, who
> being naughty in my sight, shall snuff it.
>
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python


Maggiori informazioni sulla lista Python