私は、レガシー Paradox データベース システムの管理が非常に不十分な環境で作業しています。(私は管理者ではありません。) 私は pyodbc を使用してテーブルと対話することをいじっていましたが、基本的な機能は機能しているようです。ここにいくつかの(動作する)テストコードがあります:
import pyodbc
LOCATION = "C:\test"
cnxn = pyodbc.connect(r"Driver={{Microsoft Paradox Driver (*.db )\}};DriverID=538;Fil=Paradox 5.X;DefaultDir={0};Dbq={0};CollatingSequence=ASCII;".format(LOCATION), autocommit=True, readonly=True)
cursor = cnxn.cursor()
cursor.execute("select last, first from test")
row = cursor.fetchone()
print row
問題は、重要なテーブルのほとんどが、ほぼ常に誰かの Paradox GUI で開かれていることです。select
これらのテーブルのいずれかから実行しようとすると、次のエラーが発生します。
pyodbc.Error: ('HY000', "[HY000] [Microsoft][ODBC Paradox Driver] Could not lock
table 'test'; currently in use by user '(unknown)' on machine '(unknown)'. (-1304)
(SQLExecDirectW)")
これは明らかに、pyodbccursor.execute()
が呼び出されたときにテーブルをロックしようとするためです。cursor.execute()
任意の SQL コードを実行し、テーブルを変更する可能性があるため、この動作は完全に理にかなっています。
ただし、Paradox 自体は (その GUI を通じて) 複数のユーザーをうまく処理しているようです。人々がテーブルを使用しているときにテーブルを再構築しようとすると、同様のエラーが発生するだけです。
私がやっているときにテーブルをロックする必要がないように、pyodbcにある種の読み取り専用モードを使用させる方法はありますselect
か? それともロックは、私が回避できない仕組みの基本的な部分なのでしょうか?
他のモジュールを使用するソリューションもまったく問題ありません。