通过与MS Access的odbc连接避免MaxLocksPerFile

时间:2009-12-07 15:20:10

标签: ms-access sqlalchemy pyodbc

由于“我无法控制的情况” tm ,我使用sqlalchemy和MS Access后端。我遇到了以下代码的问题:

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条记录进行删除和循环直到完成?

2 个答案:

答案 0 :(得分:1)

看了这个,sqlalchemy不能支持删除'Top'(取消了每次排序和删除前9000的简单选项,直到整个删除完成)所以我放弃了并且只是单独删除了每一行。不理想,但鉴于:

1)此操作仅每月执行一次
2)无论如何删除很快 3)我是应用程序的主要用户......

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

答案 1 :(得分:0)

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

现在,选项1需要管理员访问HKLM。选项2是特定于访问的,我不知道这些是否适用于sqlalchemy。