gpt4 book ai didi

SQL 在重复键违规后继续执行查询

转载 作者:搜寻专家 更新时间:2023-10-30 20:06:44 24 4
gpt4 key购买 nike

我有这样一种情况,如果它不存在,我想插入它,如果它已经存在,我不想插入它。我尝试创建 sql 查询来防止这种情况发生(请参阅 here ),但有人告诉我一个解决方案是创建约束并在它们被违反时捕获异常。

我已经有了限制。我的问题是——如何捕获异常并继续执行更多查询?如果我的代码如下所示:

cur = transaction.cursor()

#execute some queries that succeed

try:
cur.execute(fooquery, bardata) #this query might fail, but that's OK
except psycopg2.IntegrityError:
pass

cur.execute(fooquery2, bardata2)

然后我在第二次执行时遇到错误:

psycopg2.InternalError: current transaction is aborted, commands ignored until end of transaction block

如何告诉计算机我希望它继续执行查询?我不想 transaction.commit(),因为我可能想回滚整个事务(之前成功的查询)。

最佳答案

我认为您可以做的是在尝试执行可能导致违规的语句之前使用SAVEPOINT。如果发生违规,那么您可以回滚到 SAVEPOINT,但保留您的原始事务。

这是另一个可能有用的线程: Continuing a transaction after primary key violation error

关于SQL 在重复键违规后继续执行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3120688/

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