我有一个包含许多列的表,主键是AUTOINCREMENT,从1开始。我正在逐行解析文件中的csv数据,并且可能存在重复的行。
在这种情况下,我需要检查表Main中是否已经存在具有相同值的行,对于下面列出的所有变量(当然还有增量主键),如果不存在,则使用这些变量创建新行。
INSERT或IGNORE在这种情况下不工作,我不明白为什么。
提前致谢
cur.execute('''INSERT OR IGNORE INTO Main (sku_id, skucat_id, prodline_id, lor_id,
skucat_id, georegion_id, geosector_id, month, year,
sellin_un, sellin_rur, sellout_un, sellout_rur)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''', (sku_id,
skucat_id, prodline_id, lor_id, skucat_id, georegion_id,
geosector_id, month, year, sellin_un, sellin_rur,
sellout_un, sellout_rur, ))
答案 0 :(得分:1)
插入或忽略的忽略部分基于冲突。正如SQLite documentation for on conflicts中所述,您需要在表中使用唯一键或主键。
您的表中是否有一列或一组列是唯一的还是可以作为主键的列,例如sku_id?这将导致冲突,因此只要命中该约束就会忽略插入。现在,您只是在表上插入没有约束的数据,因此无论何时执行插入都不会检查任何内容。