Python pyodbc可能存在的线程问题

Python pyodbc可能存在的线程问题,python,oracle,python-2.7,pyodbc,Python,Oracle,Python 2.7,Pyodbc,我有一个现有的系统,其中oracle数据库由一系列Python文件填充元数据。大约有500个,目前一次运行一个的方法大约需要一个小时才能完成 为了减少运行时间,我尝试了对单个文件进行线程处理,同时运行它们,但是我发现了一个错误 pyodbc.IntegrityError: ('23000', '[23000] [Oracle][ODBC][Ora]ORA-00001: unique constraint (DB.PK_TABLE_NAME) violated\n (1) (SQLExecDire

我有一个现有的系统,其中oracle数据库由一系列Python文件填充元数据。大约有500个,目前一次运行一个的方法大约需要一个小时才能完成

为了减少运行时间,我尝试了对单个文件进行线程处理,同时运行它们,但是我发现了一个错误

pyodbc.IntegrityError: ('23000', '[23000] [Oracle][ODBC][Ora]ORA-00001: unique constraint (DB.PK_TABLE_NAME) violated\n (1) (SQLExecDirectW)')
回溯到以下调用:

File "C:\file.py", line 295, in ExecuteSql
cursor.execute(Sql)

有谁能为我解释一下吗?如果抛出错误的文件单独运行,则似乎不会发生这种情况,这使我怀疑这是一个访问问题,其中两个文件试图同时写入数据库。我希望情况并非如此,因为这可能会完全否决这种方法。

我最终意识到,问题来自提交给数据库的SQL的构造方式


表的ID是由“GetNext()”函数生成的,该函数从表中获取当前最大ID并将其递增1。当同时运行多个文件并试图基于生成的ID使用相同的ID时,此操作失败。

您似乎遇到了标识符冲突。您的插入是否包装在事务中?您是否在多个线程之间共享单个连接或光标?@FlipperPA每个线程都有自己的连接。它们不包含在事务中(这是一种非常复杂的方法,我正试图一点一点地改进)