" [unixODBC] [驱动程序管理器]未找到数据源名称,并且未指定默认驱动程序"尽管/etc/odbc.ini有DSN

时间:2017-12-06 02:19:53

标签: pyodbc

尽管"[unixODBC][Driver Manager]Data source name not found, and no default driver specified"在连接字符串中引用了DSN,但仍获得/etc/odbc.ini。为什么会发生这种情况以及可以做些什么?

尝试使用docs (centos 7)设置pyodbc以连接到MSSQLServer。然而,当试图实际连接到数据库时,

import pyodbc 

# setup db connection
server = 'myserver' 
database = 'mydb' 
username = 'myusername' 
password = 'mypassword' 
cnxn_str = 'DSN=MyMSSQLServer;DATABASE='+database+'UID='+username+'PWD='+password+'MultipleActiveResultSets=True;'
cnxn = pyodbc.connect(cnxn_str)

获取错误"[unixODBC][Driver Manager]Data source name not found, and no default driver specified",即使在运行时:

[mapr@mnode01 ~]$ cat /etc/odbc.ini
[MyMSSQLServer] Driver=ODBC Driver 13 for SQL Server
Description=My MS SQL Server
Trace=No
Server=<now using my sql server ip>

我可以看到我在python代码中引用的DSN记录在/etc/odbc.ini文件中。有谁知道这里会发生什么?感谢。

注意:我最初完全按照docs中的规定运行pyodbc设置,但后来重新执行this步骤以使用sql server的ip地址想连接到:

vi /home/user/odbcadd.txt

[MyMSSQLServer] Driver = ODBC Driver 13 for SQL Server

Description = My MS SQL Server

Trace = No

Server = <my sql server ip>

然后重新写入odbc.ini

sudo odbcinst -i -s -f /home/user/odbcadd.txt -l

1 个答案:

答案 0 :(得分:5)

用户Gord Thompson评论的解决方案解决了我的问题。我用来填充~/odbcadd.txt文件的/etc/odbc.ini文件需要将'Driver ='行放在与DSN不同的行中,如下所示:

[mapr@mnode01 ~]$ cat /etc/odbc.ini 
[MyMSSQLServer]
Driver=ODBC Driver 13 for SQL Server
Description=My MS SQL Server
Trace=No
Server=172.18.4.38