В pysqlite, нарушающее ограничение NOT NULL
или UNIQUE
, также вызывает IntegrityError.
К сожалению, этот тип исключения не содержит код ошибки, а только сообщение.
Итак, допустим, я хочу игнорировать нарушения уникального ограничения, потому что я знаю, что это безопасно для данных, но должны указываться значения Null в ключевых столбцах.
Я придумал следующее решение:
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()
Однако разбор сообщения об ошибке кажется неправильным и может быть ненадежным.
Есть ли лучший способ сделать это, возможно, даже используя con.executemany()
?