2009-12-08 11 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' 

Sin embargo ... si entro en "MySQL -uuser -ppass db", funciona:¿Por qué no funciona mi script, pero puedo INSERTAR manualmente en mysql?

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

no sé si esto podría ser un problema ... pero yo estaba teniendo un problema de replicación anterior.

Me gustaría INSERTAR 99999 filas en la base de datos. Pero está vacío.

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

¿Te importaría decirnos cómo exactamente no funciona? – shylent

Respuesta

16

Si no hay ningún mensaje de error en particular (en otras palabras, parece que funciona, pero el inserto no se pegue), asegúrese de que usted se compromete() después de la declaración:

conn.commit() 
+1

conn.autocommit (Verdadero) – TIMEX

+0

No sé a qué se refiere con este comentario, pero le recomiendo encarecidamente NO activar el compromiso automático, a menos que esté absolutamente seguro de que lo desea (sugerencia: no lo hace). Las transacciones están ahí por una razón. Usalos, usalos a ellos. – shylent

3

Usted tiene que confirmar (emitiendo un conn.commit()), porque el autocommit está desactivado por defecto (y con razón).

1

Si sucede que ninguno de sus datos se almacenan incluso después de cometer, echar un vistazo a mi respuesta a esta cuestión: pymysql callproc() appears to affect subsequent selects

La idea básica que hay que utilizar executemany() en lugar de ejecutar() para obtener los datos almacenados. (pymysql 0.5 para Python 3.2).

Un poco más tarde descubrí que el problema real es que exit() se ejecuta demasiado rápido y, debido a eso, los datos no se almacenan en la base de datos.

Así que, finalmente, el problema parece ser fijo con:

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

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

Funciona!

Cuestiones relacionadas