32位pyodbc读取64位访问(accdb)

时间:2014-01-27 23:03:23

标签: python ms-access odbc

我在Windows 8.1 64位计算机上运行python 2.7 32位。

我有Access 2013和我尝试从python和pyodbc访问的.accdb文件。

我可以在64位ODBC管理器中创建64位DSN。但是,当我尝试从python连接到它时,我收到错误:

  

错误:(u' IM002',u' [IM002] [Microsoft] [ODBC驱动程序管理器]未找到数据源名称且未指定默认驱动程序')

据推测,python只是在寻找32位DSN并且找不到我创建的64位DSN。

当我尝试在32位ODBC管理器中创建32位DSN时,没有accdb文件的驱动程序(只是.mdb)。

我认为我需要一个用于Access 2013文件(.accdb)的32位ODBC驱动程序,但是还没有找到它。

我可以做我想做的事情吗? - 32位python访问Access 2013.accdb文件?

3 个答案:

答案 0 :(得分:9)

包括Python在内的32位应用程序只能使用32位ODBC驱动程序。

包括Python在内的64位应用程序只能用于64位ODBC驱动程序。

如果你有:

  • 带有pyodbc模块的32位Python
  • 64位MS Access ODBC驱动程序

然后你必须改变一些事情:

  1. 您可以安装64位版本的Python(我使用具有odbc模块的Active Python),然后您可以使用64位版本的pyodbc模块(我看到它用于Python 2.6,2.7和3.3)
  2. 您可以安装32位版本的MS Access驱动程序
  3. 使用pyodbc.dataSources()可以列出ODBC源:

    sources = pyodbc.dataSources()
    dsns = list(sources.keys())
    dsns.sort()
    sl = []
    for dsn in dsns:
        sl.append('%s [%s]' % (dsn, sources[dsn]))
    print('\n'.join(sl))
    

    如果您使用ActiveState Python,那么您可以使用odbc模块列出它们,如我的食谱中所示:http://code.activestate.com/recipes/578782-printing-list-of-odbc-data-sources/?in=user-186902

答案 1 :(得分:5)

我有同样的问题。对我来说,问题是我有32个python和32位pyodbc和32位MS Access。但是我创建的pyqt应用程序不能在64位Access的计算机上运行。

我的解决方案是安装此处找到的32位Access驱动程序(如Mikal所述)... http://www.microsoft.com/en-us/download/details.aspx?id=13255 在命令提示符下使用" / passive"选项。否则,它就不会安装。

例如, C:\ Downloads \ AccessDatabaseEngine.exe / passive 安装了驱动程序,现在我的应用程序可以在主机上正常运行。

安装的32位和64位Access驱动程序可能存在问题,也可能没有问题。到目前为止,我还没有看到任何。

答案 2 :(得分:2)

试验和错误显示安装“Access Database Engine”2007似乎为Access accdb文件创建了32位ODBC源。