In pysqlite, Verletzung einer NOT NULL
oder eine UNIQUE
Einschränkung ebenfalls einen IntegrityError. Leider bietet dieser Ausnahmetyp keinen Fehlercode, sondern nur eine Nachricht.pysqlite IntegrityError: unterscheiden 'NOT NULL' von 'UNIQUE' Verletzung
Also sagen wir, ich möchte Unique-Constraint-Verletzungen ignorieren, weil ich weiß, dass dies für die gegebenen Daten sicher ist, aber Null-Werte in den Schlüsselspalten sollten gemeldet werden.
Ich habe mit folgenden Lösung gekommen:
con = sqlite3.connect(':MEMORY:')
con.execute('''CREATE TABLE ABCD (A TEXT NOT NULL,
B TEXT NOT NULL,
C TEXT NOT NULL,
D TEXT NOT NULL,
PRIMARY KEY (A, B))''')
with con:
for a, b, c, d in inputs:
try:
con.execute('INSERT INTO ABCD VALUES (?, ?, ?, ?)',
(a, b, c, d))
except sqlite3.IntegrityError as e:
# Skip 'not unique' errors, but raise others.
if not e.message.endswith('not unique'):
raise
con.close()
scheint jedoch falsch die Fehlermeldung Parsen und könnte unzuverlässig sein. Gibt es einen besseren Weg, dies zu tun, vielleicht sogar con.executemany()
?
Ich habe keine Antwort auf Ihre Frage haben. Aber ich frage mich, was eine Beschränkung ist, wenn sie sicher ignoriert werden kann? Warum lass es nicht einfach fallen? In Ihrem Beispiel ist der Code '(A, B)' PK. Ich denke, dass diese Einschränkung nicht ignoriert werden darf. Was wäre ein echter Anwendungsfall? –
Die eindeutige Einschränkung wird nicht ignoriert, die Eingabezeilen sind. Es wird erwartet, dass die Eingabe Duplikate für diese Felder enthält, und ich überspringe Wiederholungen stillschweigend. – lenz
Sie können die Eingabe filtern und alle Duplikate entfernen, bevor Sie sie an SQLite übergeben. –