pysqlite では、NOT NULL
またはUNIQUE
制約に違反すると、同様に IntegrityError が発生します。残念ながら、この Exception タイプはエラー コードを提供せず、メッセージのみを提供します。
したがって、一意の制約違反を無視したいとしましょう。これは、特定のデータでは安全であることがわかっているためですが、キー列の 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()
ますか?