Wie überprüfe ich, ob eine Einfügung mit MySQLdb in Python erfolgreich war?

8

Ich habe diesen Code:

%Vor%

Spaß wie es ist, cursor.rowcount ist immer eins, obwohl ich meine Datenbank aktualisiert habe, um die videos_id zu einem eindeutigen Schlüssel zu machen. Das heißt, die Einfügung schlägt fehl, weil in meinen Tests das gleiche videos_id erscheinen wird (und wenn ich die Datenbank überprüfe, wurde nichts eingefügt). Aber aus irgendeinem Grund ist die rowcount immer 1 - sogar die logging.warn Ich spucke eine rowcount von 1 aus.

Also, die Frage:
Kann ich rowcount verwenden, um herauszufinden, ob ein Einsatz erfolgreich war? Wenn ja, was mache ich (vermutlich) falsch? Wie überprüfe ich sonst, ob eine Einfügung in Ordnung war?

    
bharal 26.01.2012, 05:20
quelle

4 Antworten

22

Ihr Code wird nach den Änderungen nicht übernommen (Ihre Änderungen werden rückgängig gemacht). Das heißt, Sie sollten die folgende Zeile nach cursor.execute hinzufügen:

%Vor%

Fehlgeschlagene Einfügung wirft MySQLdb.IntegrityError , also sollten Sie bereit sein, es zu fangen.

Daher sollte Ihr Code etwa wie folgt aussehen:

%Vor%     
newtover 26.01.2012, 06:11
quelle
2

Ich habe nicht genug Reputation, um einen Kommentar abzugeben, aber hier ist eine wichtige Anmerkung:

Es ist auch möglich, dass execute () automatisch fehlschlägt, wenn Sie nach dem Aufruf nicht committen. Namentlich erfordern MyISAM-Tabellen keine Festschreibung, aber InnoDB-Tabellen.

    
TApicella 20.10.2015 15:53
quelle
1

Wenn die Einfügung fehlschlägt, erhalten Sie eine erhöhte Ausnahme oder jemand wird schreien oder Sie werden von Ihrem Stuhl fallen.

    
synthesizerpatel 26.01.2012 05:28
quelle
1

Wie wäre es mit einem try / catch-Block, anstatt auf rowcount zu schauen? Wenn eine Ausnahme auftritt, liegt ein Problem vor. Ansonsten kein Problem.

    
Beel 26.01.2012 05:40
quelle

Tags und Links