2016-03-08 42 views
1

我有一個現有的系統,其中一個Oracle數據庫由一系列Python文件填充元數據。大約有500人,而且目前一次運行它們的方法大約需要一個小時才能完成。Pyodbc可能的線程問題

爲了減少這種運行時,我已經試過穿的單個文件,在同時運行它們,但我已經得到一個錯誤

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) 

任何人都可以爲我擺脫任何光線嗎?如果引發錯誤的文件單獨運行,這似乎不會發生,這導致我懷疑這是兩個文件試圖一次寫入數據庫的訪問問題。我希望事實並非如此,因爲這可能會完全否決這種方法。

+2

您似乎遇到標識符衝突。你的INSERT包裝在交易中嗎?你是否在多個線程中共享單個連接或遊標? – FlipperPA

+0

@FlipperPA每個線程都有自己的連接。它們沒有被包裹在交易中(它是一種非常黑客行爲的方法,我試圖改進一點點) – Strongo

回答

1

我最終意識到這個問題來自SQL提交給數據庫的方式。

該表的ID由「GetNext()」函數生成,該函數從表中獲取當前最大ID並將其加1。當多個文件正在運行時嘗試使用基於此生成的相同ID,這是失敗的。