3

我在这里面临一个小问题。我有一个包含多列的表,但我想要编写一个在我的 python 脚本中使用的 sqlite 查询,这样我可以在找不到键时插入,或者如果已经找到键,则更新其他值。我进行了一些研究并通过了这个答案,但我担心我的内容无法正常工作,即使它存在,也会继续添加新行。

使用这个我写了一个查询,因为我的更新/插入依赖于一个称为 id 的列,它是这个表的外键约束。我要更新的其他两列是名称和角色。所以我想要做的是在找不到 id 的情况下插入所有三个。如果找到,则查看其他两列是否具有相同的值并更新它。这是我的尝试。

INSERT OR REPLACE INTO tblExample(id, name, role) VALUES ( COALESCE((SELECT id FROM tblExample WHERE id = 1),'1'),'name','role');

但它仍在插入新行。为什么?我怎样才能避免它?任何更简单的解决方案?

4

2 回答 2

1

有几件事:

  1. 重复检测基于PRIMARY KEY您要插入的表的定义。如果您没有在表上明确定义主键,它将使用唯一ROW_ID值(并且您将始终获得一个新行)。PRIMARY KEY这张桌子有什么用?

  2. INSERT OR REPLACE确实替换了行,而不是更新。这意味着如果检测到重复并选择了 REPLACE 路径,则语句中未给定值的任何列都将更新为其DEFAULT,如果未DEFAULT指定,则更新为 NULL 。换句话说,如果您的表有一个名为 的附加列city,并且替换了一行,那么city将是NULL,而不是原始行中的任何值。

于 2013-08-19T16:10:46.503 回答
0

这应该可行,但诀窍是确保您的 id(我假设它是该表的主键)与现有 id 匹配,否则它不会将其视为重复记录。

于 2013-08-19T15:44:34.960 回答