gpt4 book ai didi

python - IntegrityError 后继续加载

转载 作者:IT王子 更新时间:2023-10-29 06:24:35 29 4
gpt4 key购买 nike

在 python 中,我正在使用 importmany 填充 SQLITE 数据库,因此我可以一次导入数万行数据。我的数据包含在元组列表中。我在数据库中设置了我想要的主键。

我遇到的问题是主键错误会引发 IntegrityError。如果我处理异常,我的脚本将在主键冲突时停止导入。
尝试:

try:
self.curs.executemany("INSERT into towers values (NULL,?,?,?,?)",self.insertList)
except IntegrityError:
print "Primary key error"
conn.commit()


所以我的问题是,在 python 中使用 importmany 我可以:

1.捕获违反主键的值?
2. 出现主键错误后继续加载数据。

我明白为什么它不继续加载,因为在异常发生后我将数据提交到数据库。然而,我不知道如何从我离开的地方继续。

不幸的是,我无法复制并粘贴该网络上的所有代码,将不胜感激任何帮助。现在我没有 PK 设置作为解决方法...

最佳答案

先回答(2),如果报错后还想继续加载,在SQL端简单修复:

INSERT OR IGNORE INTO towers VALUES (NULL,?,?,?,?)

这将成功插入任何没有违规的行,并优雅地忽略冲突。但是请注意,IGNORE 子句在违反外键时仍会失败。

在您的案例中,冲突解决条款的另一个选项是:INSERT OR REPLACE INTO ...。我强烈推荐 SQLite docs有关冲突和冲突解决的更多信息。

据我所知,您不能以高效的方式同时执行 (1) 和 (2)。您可以创建一个触发器在插入之前触发,该触发器可以捕获冲突的行,但这会给您的所有插入带来很多不必要的开销。 (如果你能以更聪明的方式做到这一点,请告诉我。)因此,我建议你考虑是否真的需要捕获冲突行的值,或者是否需要重新设计你的模式,如果可能/适用的话。

关于python - IntegrityError 后继续加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3212068/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com