2009-12-08 13 views
6
conn = MySQLdb.connect(host='db1', user='user', passwd='pass', db='db', port=3306) 
cursor = conn.cursor() 

count = int(sys.argv[1]) 
x = 0 
while x < count: 
    x += 1 
    cursor.execute("INSERT INTO auth_group(name) VALUES(%s)", (str(x))) 
    #if I change %s to 'kkkk', it doesn't work either. 

    print str(x) + '/' + str(count) 
print 'done' 

Comunque ... se vado in "mysql -uUser -ppass db", funziona:Perché il mio script non funziona, ma posso inserire manualmente in mysql?

mysql > INSERT INTO auth_group(name) VALUES('kkkkk'); 

non so se questo potrebbe essere un problema ... ma io stava avendo un problema di replica prima.

Vorrei INSERIRE 99999 righe nel database. Ma è vuoto.

mysql> select * from auth_group; 
Empty set (0.33 sec) 
+1

Ti dispiacerebbe dirci, in che modo esattamente non funziona? – shylent

risposta

16

Se c'è alcun messaggio di errore particolare (in altre parole, sembra funzionare, ma l'inserto non si attacca), assicuratevi di commit() dopo l'istruzione:

conn.commit() 
+1

conn.autocommit (True) – TIMEX

+0

Non so cosa intendi con questo commento, ma consiglio fortemente di NON attivare l'autocommit, a meno che tu non sia assolutamente sicuro di volerlo (suggerimento: non lo fai). Le transazioni ci sono per un motivo. Usali. – shylent

3

È doversi impegnare (emettendo un conn.commit()), perché l'autocommit è disattivato di default (e giustamente).

1

Se accade che nessuno dei vostri dati vengono memorizzati anche dopo commettere, date un'occhiata alla mia risposta a questo problema: pymysql callproc() appears to affect subsequent selects

L'idea di base non è quella di utilizzare executemany() al posto di execute() per ottenere i dati memorizzati. (pymysql 0.5 per Python 3.2).

Un po 'più tardi ho scoperto che il problema attuale è che exit() viene eseguito troppo velocemente e, a causa di ciò, i dati non vengono memorizzati nel database.

Così, infine, il problema sembra essere risolto con:

[…] 
cur.execute("insert into …") 
import time 
time.sleep(2) 

cur.close() 
conn.close() 
time.sleep(2) 
exit() 

Funziona!

Problemi correlati