use*_*476 4 python ms-access pyodbc
我正在尝试使用 访问 Access 数据库 ( .mdb) pyodbc。
我可以很好地连接到它\xe2\x80\x94
\n\nconnection = pyodbc.connect(driver=\'{Microsoft Access Driver (*.mdb)}\', dbp=path, pwd=password)\nRun Code Online (Sandbox Code Playgroud)\n\n但我无法查询MSysObjects以获取其表的列表\xe2\x80\x94
cursor = connection.cursor()\ncursor.execute(\'select * from MSysObjects where Type=1 and Flags=0\')\nRun Code Online (Sandbox Code Playgroud)\n\n它给了我\xe2\x80\x94
\n\nRecord(s) cannot be read; no read permission on \'MSysObjects\'. (-1907) (SQLExecDirectW)\nRun Code Online (Sandbox Code Playgroud)\n\n浏览了一下,好像是因为数据库被“保护”了。
\n\n我无法运行 Access 来更改它。有什么地方可以以编程方式解决这个问题吗?我需要知道数据库用户或类似的信息吗?
\n\n我在 Visual Basic \xe2\x80\x94 中看到了一种解决方法,有没有办法可以在 Python 中进行调整?我想我需要一个不同的库(OLEDB)。
\n\n谢谢!
\n解决方案是使用cursor.tables()以下代码片段所示的方法:
import pyodbc
connection = pyodbc.connect(driver='{Microsoft Access Driver (*.mdb)}', dbp=path, pwd=password)
cursor = connection.cursor()
tableNames = [x[2] for x in cursor.tables().fetchall() if x[3] == 'TABLE']
Run Code Online (Sandbox Code Playgroud)
可能有一种更简洁的编码方式,但我很着急;)
(感谢那些对原始问题发表评论的人;我刚刚发布了这段代码,因为无论如何我都将其写入我的笔记中)