32 位 pyodbc 读取 64 位访问 (accdb)
Posted
技术标签:
【中文标题】32 位 pyodbc 读取 64 位访问 (accdb)【英文标题】:32 bit pyodbc reading 64 bit access (accdb) 【发布时间】:2014-01-27 23:03:23 【问题描述】:我在 Windows 8.1 64 位机器上运行 python 2.7 32 位。
我有 Access 2013 和一个 .accdb 文件,我正在尝试从 python 和 pyodbc 访问。
我可以在 64 位 ODBC 管理器中创建一个 64 位 DSN。但是,当我尝试从 python 连接到它时,出现错误:
错误: (u'IM002', u'[IM002] [Microsoft][ODBC Driver Manager] 未找到数据源名称且未指定默认驱动程序')
据推测,python 只是在寻找 32 位的 DSN,并没有找到我创建的 64 位的。
当我尝试在 32 位 ODBC 管理器中创建 32 位 DSN 时,没有用于 accdb 文件(只有 .mdb)的驱动程序。
我想我需要一个用于 Access 2013 文件 (.accdb) 的 32 位 ODBC 驱动程序,但一直找不到。
有可能做我想做的事吗? -- 32位python访问Access 2013 .accdb文件?
【问题讨论】:
【参考方案1】:包括 Python 在内的 32 位应用程序只能使用 32 位 ODBC 驱动程序。
包括 Python 在内的 64 位应用程序只能使用 64 位 ODBC 驱动程序。
如果你有:
带有pyodbc
模块的32位Python
64 位 MS Access ODBC 驱动程序
那么你必须改变一些东西:
-
您可以安装 64 位版本的 Python(我使用具有
odbc
模块的 Active Python),然后您可以使用 64 位版本的 pyodbc
模块(我在 Python 2.6、2.7 和 3.3 中看到它)李>
您可以安装 32 位版本 od MS Access 驱动程序
使用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
【讨论】:
【参考方案2】:我也有同样的问题。对我来说,问题是我有 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 /被动 驱动程序已安装,现在我的应用程序可以在主机上正常运行。
安装 32 位和 64 位 Access 驱动程序可能会或可能不会出现问题。到目前为止,我还没有看到任何东西。
【讨论】:
哇.. 这对我有用.. 我有 Access 2013 64bit 和 Python 32bit.. 和 pyodbc.. 起初.. 由于 32 位到 64 位的问题,pyodbc 连接不起作用.. 但是在安装 AccessDatabaseEngine.exe 之后,pyodbc 连接现在工作得很好。谢谢你。 (我不必对 /passive 做任何事情)。 我已经通过安装 32 位 python 和访问 32 位驱动程序修复了这个问题。您可以通过此代码检查是否安装了 python。 >>> 导入结构 >>> 打印 (8*struct.calcsize("P"))【参考方案3】:试验和错误表明,安装“Access Database Engine”2007 似乎为 Access accdb 文件创建了 32 位 ODBC 源。
【讨论】:
如果安装 32 位版本的 Access 数据库引擎 2007 不会导致 64 位版本的 Access 2013 出现问题,那么这是个好消息。但是,最好在给定的计算机上只安装一个版本的 Access 数据库引擎(也称为“ACE”)。 在他的 cmets 中没有任何地方建议甚至暗示正在使用甚至在计算机上安装 access(或 ACE)x64。给出的唯一信息是他有一个 2013 Access 文件并且正在创建(出于某种奇怪的原因)一个 x64 位 DSN,而实际上应该启动 x32 odbc 管理器。在这种情况下,安装 ACE 2010 或 2013 也应该可以正常工作。事实上,如果这真的是 2013 年的数据库,那么我建议使用 2013 版的 ACE。 @AlbertD.Kallal 对不起,不。问题的第二句以“我有 Access 2013 和 .accdb 文件...”开头。并且 OP 可以创建 64 位 DSN 的事实意味着已经安装了 some 版本的 ACE。 好的,当然,虽然我不能 100% 确定创建 x64 DSN 是否意味着已安装 x64 ACE,但我可以这样做,我认为这是一个“好的”假设 - 所以只是尝试一定要在这里。以上是关于32 位 pyodbc 读取 64 位访问 (accdb)的主要内容,如果未能解决你的问题,请参考以下文章
在 x86-64 中访问 32 位整数数组是不是存在性能损失?