通过odbc连接到MS Access避免MaxLocksPerFile

问题描述:

由于“我无法控制的情况”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

已经观察到这一点,SQLAlchemy的不支持“顶”上删除(取消订货的简单的选择和每个直到整个删除结束时间删除顶部9000),所以我给的,只是删除每行单独。不理想,但考虑到:

1)此操作只每月一次
2)删除执行是相当快反正
3)我的应用程序的主要用户...

编写更有效的工作似乎不值得。

PRB: Error "3050 Could Not Lock File" When You Connect to a Jet Database on a Novell Server

Now选项1要求HKLM管理员权限。选项2是特定于Access的,我不知道这些是否适用于sqlalchemy。