2009-12-07 116 views
0

由於「我無法控制的情況」tm,我使用sqlalchemy和MS Access後端。我遇到以下代碼的問題:通過odbc連接到MS Access避免MaxLocksPerFile

def delete_imports(self, files_imported_uid): 
    table_name = 'my_table' 
    delete_raw = self.meta.tables[table_name].delete() 
    self.engine.execute(delete_raw.where(
     self.meta.tables[table_name].c.files_imported_uid == files_imported_uid) 
     ) 

將引發「超出文件共享鎖定計數」。大表錯誤。產生的聲明只是:

DELETE FROM my_table WHERE my_table.files_imported_uid = ? 

帶有uid的參數。該語句然後通過pyodbc執行。 MSDN provided一些建議來解決問題,然後通知我,如果數據庫位於Novell NetWare服務器上,它們將無法工作。

是否有我可以使用的已知工作(最好是在sqlalchemy層),還是我需要創建一些醜陋的黑客,一次選擇前9,000條記錄來刪除和循環,直到完成?

+0

我不知道你是否發現這個:http://www.intersoft.co.nz/support_technicalbulletins/tsb1009.htm? – Fionnuala 2009-12-07 15:51:47

+0

不幸的是,我不在IT部門,因此無法控制網絡共享設置。 – mavnn 2009-12-07 16:12:43

回答

0

已經觀察到這一點,SQLAlchemy的不支持「頂」上刪除(取消訂貨的簡單的選擇和每個直到整個刪除結束時間刪除頂部9000),所以我給的,只是刪除每行單獨。不理想,但考慮到:

1)此操作只每月一次
2)刪除執行是相當快反正
3)我的應用程序的主要用戶...

編寫更有效的工作似乎不值得。