Return sqlite3 中约束失败时的现有主键 ID
Return existing primary key ID upon constraint failure in sqlite3
我对 SQLite 中 table 的两列有 UNIQUE
约束。
如果我将在这两列上重复的记录插入 table,我将得到一个异常 (sqlite3.IntegrityError
)。
是否可以在发生此类违规时检索此记录的主键 ID,而无需执行额外的操作SELECT
?
您可以使用 try except
捕获错误并打印出来
try:
c.execute('''INSERT INTO spys(name) VALUES (?)''', ('Chuck',))
except sqlite3.IntegrityError as e:
print('sqlite error: ', e.args[0])
希望对您有所帮助。
如果主键是导致违规的 UNIQUE 约束的一部分,则您已经有了它的值。
否则,UNIQUE 约束中的两列是 table 的备用键,即它们可以唯一标识冲突行。
如果你需要实际的主键,你需要做一个额外的SELECT。
(现有行的主键不是异常的一部分,因为在 INSERT 尝试期间从未查看过它。)
我对 SQLite 中 table 的两列有 UNIQUE
约束。
如果我将在这两列上重复的记录插入 table,我将得到一个异常 (sqlite3.IntegrityError
)。
是否可以在发生此类违规时检索此记录的主键 ID,而无需执行额外的操作SELECT
?
您可以使用 try except
捕获错误并打印出来try:
c.execute('''INSERT INTO spys(name) VALUES (?)''', ('Chuck',))
except sqlite3.IntegrityError as e:
print('sqlite error: ', e.args[0])
希望对您有所帮助。
如果主键是导致违规的 UNIQUE 约束的一部分,则您已经有了它的值。
否则,UNIQUE 约束中的两列是 table 的备用键,即它们可以唯一标识冲突行。
如果你需要实际的主键,你需要做一个额外的SELECT。 (现有行的主键不是异常的一部分,因为在 INSERT 尝试期间从未查看过它。)