在 pysqlite 中,违反 aNOT 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()
?