我正在尝试使用pyobdc
从paradox数据库中读取数据,并且在尝试连接数据库时出现以下错误:
pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
我曾尝试为数据库创建新的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
答案 0 :(得分:22)
关于要检查什么的两个想法:
1)您的连接字符串错误。有一种直接从ODBC Administrator程序获取已知良好连接字符串的方法(取自http://www.visokio.com/kb/db/dsn-less-odbc)。这些说明假设您使用的是MDB,但相同的过程适用于paradox文件
在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:
这为您提供了完整的连接字符串。在此示例中,字符串变为:
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驱动程序:
Microsoft Access驱动程序(* .mdb)
Microsoft Access驱动程序(* .mdb)-这是较旧的32位“ Jet” ODBC驱动程序。它作为Windows安装的标准部分包括在内。它仅适用于.mdb(不适用于.accdb)文件。也已正式弃用。
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
致谢!