0

「私の手に負えない状況」tmのため、MS Access バックエンドで sqlalchemy を使用しています。次のコードに問題があります。

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 はこの問題を回避するためのいくつかの提案を提供しましたが、データベースが Novell NetWare サーバー上にある場合は機能しないと通知されました。

私が使用できる既知の回避策はありますか (できれば sqlalchemy レイヤーで)、または一度に上位 9,000 レコードを選択して削除し、終了するまでループする醜いハックを作成する必要がありますか?

4

2 に答える 2

1

これを調べたところ、sqlalchemyは削除時に「Top」をサポートできないため(削除全体が完了するまで、毎回Top 9000を並べ替えて削除するという単純なオプションを削除)、各行を個別に削除しました。理想的ではありませんが、次のことを前提としています。

1)この操作は月に1回だけ実行されます
2)とにかく削除はかなり速いです
3)私はアプリケーションのメインユーザーです...

より効率的な回避策をコーディングする価値はないようです。

于 2009-12-11T09:57:33.367 に答える
0

PRB: Novell サーバー上の Jet データベースに接続すると、エラー "3050 はファイルをロックできませんでした" が表示される

オプション 1 では、HKLM への管理者アクセスが必要です。オプション 2 は Access 固有のものであり、それらが sqlalchemy で機能するかどうかはわかりません。

于 2009-12-07T19:32:01.387 に答える