插入或更新sqlite3

时间:2013-08-19 14:29:50

标签: insert sqlite

我在这里面临一个小问题。我有一个包含多列的表,但我想要的是编写一个sqlite查询,在我的python脚本中使用,以便我可以插入如果找不到密钥,或者如果已经找到密钥则更新其他值。我研究了一下并通过了这个answer,但是我对我的内容的关注并没有起作用,并且即使它存在也不断添加新行。

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

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

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

2 个答案:

答案 0 :(得分:1)

有几件事:

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

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

答案 1 :(得分:0)

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