In Python bevölke ich eine SQLITE-Datenbank mit dem Importmany, so dass ich mehrere zehntausend Datenzeilen gleichzeitig importieren kann. Meine Daten sind als eine Liste von Tupeln enthalten. Ich hatte meine Datenbank mit den Primärschlüsseln eingerichtet, wo ich sie haben wollte.Continue loading after IntegrityError
Problem, das ich stieß, war Primärschlüsselfehler würden einen IntegrityError werfen. Wenn ich die Ausnahme handhabe, beendet mein Skript den Import beim Primärschlüsselkonflikt.
Versuch:
try:
self.curs.executemany("INSERT into towers values (NULL,?,?,?,?)",self.insertList)
except IntegrityError:
print "Primary key error"
conn.commit()
So sind meine Fragen, in Python mit importmany kann ich:
1. Erfassen Sie die Werte, die den Primärschlüssel verletzen?
2. Fahren Sie fort, Daten zu laden, nachdem ich meine Primärschlüsselfehler erhalte.
Ich bekomme, warum es nicht weiter lädt, weil nach der Ausnahme ich die Daten in die Datenbank festschreiben. Ich weiß nicht weiter, wo ich aufgehört habe.
Unforutnley Ich kann nicht den gesamten Code in diesem Netzwerk kopieren und einfügen, jede Hilfe wäre sehr willkommen. Im Moment habe ich keine PKs gesetzt als Arbeit um ...
Wie ich es verstehe, existiert 'executemany', weil es eine deutliche Geschwindigkeitssteigerung gegenüber python-iterierten' execute' Befehlen bietet. So wird Ihre Lösung, obwohl sie funktionieren würde, einen riesigen Datenimport erheblich verlangsamen. Eine Lösung wäre, die Primärschlüssel, die in einem Python-Satz hinzugefügt wurden, zu verfolgen und die Einfügeliste vorzeitig zu filtern, bevor sie dem Cursor zugeführt wird. –
@PeterMcMahan OK Ich stimme zu. Es ist kein effizienter Code. Es funktioniert nur, wie Sie gesagt haben. – jheyse