如何使用pyodbc将MS Access连接到Python

14

我在使用pyodbc连接Access数据库时遇到了问题。我看过其他几乎与我的代码完全相同并且能够工作的示例:

import pyodbc 
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;DATABASE=PYODBC.accdb;UID=me;PWD=pass')
cursor = cnxn.cursor()

cursor.execute("SELECT Forename FROM Student")
row = cursor.fetchone()
if row:
    print(row)

我的电脑运行的是windows 7家庭普及版64位操作系统。 我安装了Microsoft office 2010; 32位版本。 同时,我正在使用Python 3.3; 32位版本。

我不知道出了什么问题,甚至没有收到错误消息,程序界面已经打开,但是什么也没有发生。希望能得到帮助,非常感谢!


为什么ODBC驱动程序是SQL Server,但你却指定了一个Access数据库?而且数据库的名字是PYODBC.accdb吗?请注意:SQL Server是一个客户端服务器数据库,而Access是一个文件服务器数据库。它们使用不同的驱动程序和连接参数。 - Parfait
请编辑您的问题并提供更多细节。您的计算机是否安装了Microsoft Office(或仅安装了Microsoft Access)?如果是,请指明版本(2013?2010?...?)以及它是32位还是64位版本。还请告诉我们您是否正在运行32位或64位Python。 - Gord Thompson
@GordThompson 我已经在问题中添加了更多细节,对不起,我本应该最初就加上它。 - Michael
@Parfait 是的,数据库叫做PYODBC,至于驱动程序,你知道我应该放什么吗? - Michael
3个回答

18

由于您同时使用Microsoft Office和Python的32位版本,一旦具备正确的连接字符串,就应该可以正常使用。连接字符串应该如下所示:

connStr = (
    r"DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};"
    r"DBQ=C:\full\path\to\your\PYODBC.accdb;"
    )
cnxn = pyodbc.connect(connStr)

1

1

TLDR1 - PYODBC连接不需要同时使用*.mdb和*.accdb。对我来说,两者都存在与一个错误相关

TLDR2 - 连接32位驱动程序需要32位Python

TLDR3 - 有时PYPI没有编译代码作为'pip install somemodule'的WHL文件,因此要么获取C++编译器,要么找到具有WHL的Python版本,并使用该Python版本

包括*.accdb会返回一个错误。 一旦我排除了*.accdb,就不再有错误了 当没有包括'DBQ='时也出现了错误。

以下任何一个似乎都可以解决错误;

    import pyodbc
    cnxn = pyodbc.connect(r"DRIVER={Microsoft Access Driver (*.mdb)};" + \
                          r"DBQ=C:\full\path\to\your\PYODBC.accdb;"
                         )

或者;
    cnxn = pyodbc.connect("DRIVER={Microsoft Access Driver (*.mdb)};" + \
                          "DBQ=C:\\full\\path\\to\\your\\PYODBC.accdb;"
                         )

同时,对于'pip install pyodbc',我遇到了一个错误 错误:需要 Microsoft Visual C++ 14.0 或更高版本。请使用“Microsoft C++ Build Tools”获取。

通过从 PYPI 请求已经编译为 WHL 的 PYODBC 版本,解决了这个问题。我安装了 PY3.8,因为 PYPI (https://pypi.org/project/pyodbc/#files) 没有可用于 PY 3.9 的预编译 PYODBC WHL。然后,pip install pyodbc 就从 PYPI 收集了 WHL,而不需要编译器。一切都很好。

DavidSheldon 在 Microsoft Visual C++ 14.0 is required (Unable to find vcvarsall.bat) 中的另一个回复表明,升级 setuptools 将解决该问题,但我找不到这个基础。

由于我的操作系统只有 32 位 MS Office,所以我必须使用 32 位 Python。

所有这些都在 Win10 上进行。


1
对我来说,它只有在连接字符串中包含“*.accdb”时才有效。这可能与 MS Access 驱动程序在注册表中的列表方式有关。请使用 C:\Windows\System32\odbcad32.exe 进行检查。 - geodata

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接