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

时间:2015-09-18 22:46:31

标签: python windows python-2.7 pyodbc

我正在尝试使用pyobdc从paradox数据库中读取数据,并且在尝试连接数据库时出现以下错误:

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

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

我的系统链接如下所示:

This is what the system DNS looks like

我的代码是:

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

4 个答案:

答案 0 :(得分:22)

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

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

  • 在典型的客户端PC上,打开“控制面板” - >管理工具 - >数据来源。
  • 选择“文件DSN”选项卡,然后单击“添加”。
  • 选择适当的驱动程序(例如" Microsoft Access驱动程序(* .mdb)")并单击“下一步”
  • 单击“浏览”并选择要保存.dsn文件的位置(这是您稍后要删除的临时文件)。
  • 单击“下一步”,然后单击“完成”。
  • 您将看到特定于供应商的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

将上述内容转换为完整连接strring:

  1. 省略第一个[ODBC]行
  2. 在包含空格的所有值周围放置花括号
  3. 将所有名称=值对放在一行上,用分号分隔。
  4. 这为您提供了完整的连接字符串。在此示例中,字符串变为:

    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
    

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

答案 1 :(得分:1)

感谢您提出这个问题,我遇到了类似的问题,这个问题和答案帮助我找到了我需要的东西。 对我来说,问题最终是在Windows 10上64位Python和32位ODBC驱动程序之间的不匹配(正如Chad Kennedy建议的那样)。我正在运行完全更新的Fall Creator版本,并安装了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代码连接到数据库,没有其他问题。

答案 2 :(得分:0)

设置ODBC数据源的快捷方式可能指向32位而不是64位。

转到控制面板->管理工具->选择数据源(ODBC)->然后右键单击该文件->转到属性->快捷方式选项卡中->从{{ 1}}到

%windir%\System32\odbcad32.exe

答案 3 :(得分:0)

使用相同位配置的Office和Python解释器可以解决此问题。 但是,是的,我有64位Office和Python,并且无法正常工作...

这是解决方案。

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

  1. Microsoft Access驱动程序(* .mdb)

    Microsoft Access驱动程序(* .mdb)-这是较旧的32位“ Jet” ODBC驱动程序。它作为Windows安装的标准部分包括在内。它仅适用于.mdb(不适用于.accdb)文件。也已正式弃用。

  2. Microsoft Access驱动程序(* .mdb,*。accdb)

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

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

  
    
      

导入pyodbc

             

[如果x.startswith('Microsoft Access Driver'),则pyodbc.drivers()中x为x

    
  

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

在此链接中,您可以下载驱动程序LINK

Info source

致谢!