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 尝试期间从未查看过它。)