由于“我无法控制的情况” 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条记录进行删除和循环直到完成?
答案 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。