pyodbc 可能的线程问题

Possible threading issue with pyodbc

我有一个现有系统,其中 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 提交到数据库的构建方式上。

table 的 ID 由 "GetNext()" 函数生成,该函数从 table 获取当前最大 ID 并将其递增 1。当多个文件被 运行 并尝试使用基于此生成的相同 ID 同时失败时,这是失败的。