【问题标题】:Connect Python and MS-Access without Installing New Software无需安装新软件即可连接 Python 和 MS-Access
【发布时间】:2019-07-03 08:23:08
【问题描述】:

我想将 Python 连接到 MS-Access,但无法安装新软件(程序/驱动程序)并且没有管理员权限,因为我在公司 PC 上工作。有什么解决方法吗?

我可以获得 pyodbc 包,但由于我的 Python 是 64 位,而 MS-Access 是 32 位,我希望这是错误的来源。事实上,没有 64 位 MS-Access 驱动程序,只有一个 SQL 服务器:

import pyodbc
print(pyodbc.drivers.())
>>> ['SQL Server']

产生的错误如下:

import pyodbc
conn = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};' 
                      r'DBQ=path\file.accdb;')

>>> InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source 
    name not found and no default driver specified (0) (SQLDriverConnect)')

如前所述,我既不能安装 32 位 Python 也不能安装 64 位驱动程序(至少看起来我不能)。我尝试设置一个新环境以根据此answer by Mike Müller 安装 32 位 Python,但它导致“CondaHTTPError”,我无法修复 - 答案here 对我不起作用.

是否可以选择将 pyodbc 连接到 32 位驱动程序?来自swashek's answer,这可能有效

%windir%\SysWOW64\odbcad32.exe

但我不确定在 Python 中的何处或如何应用它。

将 Python 连接到 MS-Access 后,我的最终目标是提取 Access 查询,以便在 Python 中复制基于 Access 数据在 Access 中创建的表。有什么完全不同的方式或方法吗?

更多信息:我正在使用 Spyder 和 Anaconda 64 位。

【问题讨论】:

  • 您的机器是否安装了 Java 运行时环境 (JRE)? (您可以尝试在命令提示符下运行java -version 进行检查。)
  • 我检查了它没有安装(错误:找不到Java SE运行时环境)
  • 我们可以假设您的计算机上没有 Microsoft Access(独立的或作为 Microsoft Office 的一部分)?
  • Microsoft Access 作为 Microsoft Office Professional Plus 2013 的一部分安装在我的计算机上。

标签: python database ms-access pyodbc


【解决方案1】:

64 位应用程序(如 64 位 Python)不能使用 32 位驱动程序,而 32 位应用程序不能使用 64 位驱动程序。这根本不可能。

您的计算机上有 Microsoft Office Professional Plus 2013,当您从 64 位 Python 执行 pyodbc.drivers() 时,Access 驱动程序不会出现,因此我们可以假设您拥有 32 位版本的 Office。

因此,最直接的解决方案是将 32 位 Python 与 Office 安装的 32 位 ACE 驱动程序 (Microsoft Access Driver (*.mdb, *.accdb)) 结合使用。

或者,您可以从 32 位 Office 2013 切换到 64 位 Office 2013,然后您的 64 位 Python 可以使用 64 位 ACE 驱动程序。

【讨论】:

  • 感谢您的澄清。然后,我将请求 IT 部门允许安装这些程序中的任何一个。由于这可能需要更长时间或可能被拒绝,是否有不需要从互联网下载的选项?它通常是提取访问查询的必要方法吗?
  • 嗯,您可以使用 Access UI 将表转储到 CSV,然后使用 Python 的内置 SQLite 支持 (1)编写 CREATE TABLE 语句来创建 SQLite 表并导入数据,(2) 编写 CREATE VIEW 语句来创建对应于 Access 保存的 SELECT 查询的 SQLite 视图,(注意:Access SQL 有很多怪癖,因此将 SQL 从 Access 转换为 SQLite 可能并非易事)然后(3)从您的 Python 应用程序针对 SQLite 数据库而不是 Access 数据库运行查询。
  • 感谢您的建议。我试试看!
【解决方案2】:

我遇到了类似的情况,即机器被限制配置并且位于公司防火墙内。我们无法安装或修改已为企业设置配置的任何应用程序。您还提到您遇到了"CondaHTTPError"。这可能意味着您的应用程序被阻止连接到互联网。我还假设您的工作站安装了 Anaconda 作为您公司的一部分您可能需要找出您的 IE 连接到的公司代理服务器,以便您可以让 conda 也使用它。

如果由于某种原因您的 IT 无法将其提供给您,并且您可以通过 Internet Explorer 访问 Internet,则可能是其中设置了自动配置脚本或代理服务器。在 IE 浏览器中查看Tools -> Internet Options。然后在Connections 选项卡上,单击LAN Settings 按钮。要么:

  • 您应该会在“使用自动配置脚本”下的文本框中看到一个地址
  • 或查看代理服务器下的地址。

如果这些文本框被禁用并且地址太长而无法阅读,请检查您是否可以打开计算机的注册表编辑器 (Win+r -> regedit)。

如果 IE 有自动配置脚本:

  • 导航到HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings 并查找AutoConfigURL
  • 复制该地址并将其粘贴到浏览器中。它可以下载或让您打开文件。在记事本中打开它。
  • 根据文件的内容,您可能能够找到用于将流量重定向到该特定地址的 URL 或 IP 地址。记下这些地址。

如果你现在有你的代理服务器 URL,你可以执行answer you found:

http_proxy=<url>
https_proxy=<url>
set CONDA_FORCE_32BIT=1
conda create -n py27_32 python=2.7

我还可以使用它从 pip 安装以前无法安装的库。

pip --proxy <url> install xlwings

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 2013-09-09
    • 1970-01-01
    • 2017-05-30
    • 2017-01-31
    相关资源
    最近更新 更多