Pyodbc错误找不到数据源名称,并且没有指定默认驱动程序的paradox

Sui*_*pps 20 python windows pyodbc python-2.7

我试图用来pyobdc从paradox数据库中读取数据,并在尝试连接数据库时不断收到以下错误:

pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
Run Code Online (Sandbox Code Playgroud)

我曾尝试为数据库创建新的DNS链接,但它没有帮助.

我的系统链接如下所示:

这就是系统DNS的样子

我的代码是:

import os
import sys
import time
import pyodbc

LOCATION = "c:\Users\Marcello\Desktop\DATA\ScorMonitor.db"

cnxn = pyodbc.connect(r"Driver={{Microsoft Paradox Driver (*.db )}};Fil=Paradox 5.X;DefaultDir={0};Dbq={0}; CollatingSequence=ASCII;")
cursor = cnxn.cursor()
cursor.execute("select last, first from test")
row = cursor.fetchone()
print row
Run Code Online (Sandbox Code Playgroud)

Cha*_*edy 29

关于检查什么的两个想法:

1)您的连接字符串错误.有一种方法可以直接从ODBC Administrator程序获取已知良好的连接字符串(摘自http://www.visokio.com/kb/db/dsn-less-odbc).这些说明假设您使用的是MDB,但相同的过程适用于paradox文件

  • 在典型的客户端PC上,打开"控制面板" - >"管理工具" - >"数据源".
  • 选择File DSN选项卡,然后单击Add.
  • 选择适当的驱动程序(例如"Microsoft Access Driver(*.mdb)"),然后单击"下一步"
  • 单击"浏览"并选择要保存.dsn文件的位置(这是您稍后要删除的临时文件).
  • 单击Next然后单击Finish.
  • 您将看到特定于供应商的ODBC设置对话框.例如,使用Microsoft Access,您可能只需要单击"选择"并浏览到现有的.mdb文件,然后单击"确定".
  • 浏览到.dsn文件的位置并使用记事本打开.

在DSN文件中,您可能会看到类似于:

[ODBC]
DRIVER=Microsoft Access Driver (*.mdb)
UID=admin
UserCommitSync=Yes
Threads=3
SafeTransactions=0
PageTimeout=5
MaxScanRows=8
MaxBufferSize=2048
FIL=MS Access
DriverId=25
DefaultDir=C:\
DBQ=C:\db1.mdb
Run Code Online (Sandbox Code Playgroud)

要将上面的内容转换为完整的连接strring:

  1. 省略第一个[ODBC]行
  2. 在包含空格的所有值周围放置花括号
  3. 将所有名称=值对放在一行上,用分号分隔.

这为您提供了完整的连接字符串.在此示例中,字符串变为:

DRIVER={Microsoft Access Driver (*.mdb)};UID=admin;UserCommitSync=Yes;Threads=3;SafeTransactions=0;PageTimeout=5;axScanRows=8;MaxBufferSize=2048;FIL={MS Access};DriverId=25;DefaultDir=C:\;DBQ=C:\db1.mdb
Run Code Online (Sandbox Code Playgroud)

2)32/64位不匹配.将32位python与64位驱动程序混合使用时遇到了麻烦,反之亦然.您可能想要检查Python解释器和数据库驱动程序行.

  • 谢谢。32/64 位不匹配是我的问题。 (2认同)

小智 10

您需要一个与您的 Python 安装兼容的 Microsoft Office 版本,即它们都必须是 32 位或 64 位。从pyodbc文档:

Microsoft 实际上有两 (2) 个不同的 Access ODBC 驱动程序:

  1. Microsoft Access Driver (*.mdb)- 这是较旧的 32 位“Jet”ODBC 驱动程序。它作为 Windows 安装的标准部分包含在内。它只适用于.mdb(不是.accdb)文件。它也被官方弃用。

  2. Microsoft Access Driver (*.mdb, *.accdb)- 这是较新的“ACE”ODBC 驱动程序。它不包含在 Windows 中,但通常作为 Microsoft Office 安装的一部分包含在内。它也可作为免费的独立“可再发行”安装程序用于没有 Microsoft Office 的机器。有在“ACE” Access数据库引擎的单独的64位和32位版本(和驱动程序),并且通常具有一个或者64位版本安装了32位版本。(可以强制两个版本存在于同一台机器上,但不建议这样做,因为它会“破坏”Office 安装。因此,如果您已经拥有 Microsoft Office,强烈建议您使用与“位”

检查 Microsoft Access ODBC 驱动程序之一是否可用于您的 Python 环境(在 Windows 上)的最简单方法是

>>> import pyodbc
>>> [x for x in pyodbc.drivers() if x.startswith('Microsoft Access Driver')]
Run Code Online (Sandbox Code Playgroud)

如果您看到一个空列表,那么您正在运行 64 位 Python,您需要安装 64 位版本的“ACE”驱动程序。如果您只看到['Microsoft Access Driver (*.mdb)']并且需要处理一个.accdb文件,那么您需要安装 32 位版本的“ACE”驱动程序。


小智 5

谢谢你的问题,我有一个类似的问题,这个问题和答案帮助我找到了我需要的东西。对我来说,问题最终是 Windows 10 上 64 位 Python 和 32 位 ODBC 驱动程序之间的不匹配(正如 Chad Kennedy 所建议的)。我正在运行完全更新的 Fall Creator's Edition,并安装了 Microsoft Office Pro 2016。MS Office 安装程序仍然默认为 32 位安装(不要让我开始...)——它在安装时不会询问这个问题,所以想象一下当我发现我正在运行 32 位 Office 时我的惊讶. 因此,它会为 MS Access 安装 32 位 ODBC 驱动程序。您可以在 MS Office 安装程序对话框中单击一个不明显的微小链接以强制进行 64 位安装。

64 位 Python 安装不适用于 32 位 Microsoft Access ODBC 驱动程序,如果您在计算机上安装了 32 位 MS Office,Microsoft 将不允许您安装 64 位 ODBC 驱动程序。

修复方法是卸载 MS Office,并通过使用安装对话框上的那个小链接告诉它安装为 64 位来重新安装它。不用担心,它会记住您最近使用的所有文件和设置,以及 Outlook 中的电子邮件帐户。一旦完成,我就有了 64 位 ODBC 驱动程序,并且我的 Python 代码连接到数据库,没有进一步的问题。