Ho questo codice:Come posso verificare se un inserto ha avuto successo con MySQLdb in Python?
cursor = conn.cursor()
cursor.execute(("insert into new_files (videos_id, filename, "
"is_processing) values (%s,%s,1)"), (id, filename))
logging.warn("%d", cursor.rowcount)
if (cursor.rowcount == 1):
logging.info("inserted values %d, %s", id, filename)
else:
logging.warn("failed to insert values %d, %s", id, filename)
cursor.close()
divertimento come è, cursor.rowcount
è sempre uno, anche se ho aggiornato il mio database per rendere la videos_id una chiave univoca. Cioè, l'inserto fallisce perché nei miei test comparirà lo stesso videos_id
(e quando controllo il database, non è stato inserito nulla). ma per qualsiasi motivo, il rowcount
è sempre 1 - anche l'logging.warn
ho sputa fuori un rowcount
1.
Quindi, la domanda:
Posso usare rowcount
di capire se un inserto andato a buon fine? Se è così, cosa sto facendo (presumibilmente) sbagliato? altrimenti, come posso controllare se un inserto è andato bene?
Sei un campione, grazie – bharal
Domanda. Cosa succede se si inseriscono 500 record alla volta prima di eseguire il commit (tramite una query lunga o più inserimenti discreti)? cioè sto solo lavorando ogni 500 dischi; se uno di questi record fallisce, come posso stampare solo quel record e continuare a inserire gli altri. – gunslingor
@ user3656612 dipende dal motivo per cui falliscono. Se il problema è con la rottura di alcuni vincoli, è possibile utilizzare INSERISCI IGNORE o INSERT ... ON DUPLICATE KEY UPDATE. Se si tratta di un errore di connessione, non puoi fare nulla. Se si tratta di un errore di sintassi, dovresti prendere in considerazione la possibilità di correggere i bug nella tua applicazione. – newtover