我在一个管理非常糟糕的遗留 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)")
cursor.execute()
很明显,这是因为 pyodbc 在调用表时会尝试锁定表。这种行为非常有意义,因为cursor.execute()
运行任意 SQL 代码并可能更改表。
但是,Paradox 本身(通过其 gui)似乎可以很好地处理多个用户。如果您在人们使用表格时尝试重组表格,它只会给您类似的错误。
有什么办法可以让 pyodbc 使用某种只读模式,这样它就不必在我这样做的时候锁定表select
?还是锁定了我无法解决的工作原理的基本部分?
使用其他模块的解决方案也完全没问题。