2012-02-06 93 views
8

我试图从Windows窗口使用pymssql(版本2.0.0b1-dev-20111019与Python 2.7.1)连接到SQL Server实例。我试着从控制台最基本的做法:在Windows上使用pymssql连接到SQL Server实例

import pymssql 
c = pymssql.connect(host = r'servername\instance', 
        user = 'username', 
        password = 'userpassword') 

在回答这个问题,我得到了非常有用的错误:InterfaceError: Connection to the database failed for an unknown reason.

我有理由相信,连接信息是正确的,因为它的工作原理当我使用adodbapi,用下面的命令:

import adodbapi 
c = adodbapi.connect(r'Provider=sqloledb;Data Source=servername\instance;User ID=username;password=userpassword;' 
c.close 

我已经尝试添加端口号到主机参数,具有相同的结果。有没有人有关于如何解决这个问题的建议?


顺便说一句,我已阅读“Unable to connect to SQL Server via pymssql”的答复。 OP最终通过正确配置FreeTDS解决了他的问题,从我所知道的情况来看,它并没有被Windows上的pymssql使用。


根据@cha0site的建议,我尝试过只使用主机名,而不是主机名和实例。这导致了相同的错误,但似乎需要更长的时间才能生成错误(尽管回溯仍指示相同的行)。我指定实例的原因是,除非指定实例,否则我无法使用SSMS进行连接,因此我认为这对其他连接是必需的。


现在我也试着pymssql.connect(host='servername', user='username', password='userpassword', database='instance')具有相同的结果(基于@希德的评论)。基于pymssql documentation,我认为database参数用于指定用户要连接的初始数据库,而不是实例。

只是为了澄清,“实例”是在安装SQL Server期间提供的名称,而不是该安装中的数据库。在我看来,有可能pymssql不支持这种表示法,所以我会考虑重新配置SQL Server实例,以便它不是必需的。


现在我已经重新安装了SQL Server的默认实例,而不是一个命名实例,这让我在不指定实例名称连接。 adodbapi仍然有效(没有/instance),但pymssql仍然返回相同的错误。我也从新下载的档案库中删除并重新安装了pymssql(仍然是相同的版本)。

+0

我认为你需要传递'host'的主机名,而不是ADODB数据源。 – cha0site 2012-02-06 18:18:58

+0

@ cha0site:这种情况下的“ADODB数据源”是主机名(加上实例)。 adodbapi允许您在该位置指定主机名或IP地址,而不是指定的数据源。 – Allan 2012-02-06 18:29:42

+0

是的。我说你应该放弃这个实例并且只给它一个主机名。 – cha0site 2012-02-06 18:33:09

回答

0

检查freetds.conf文件,并查看是否已设置端口,然后再次检查了连接:

DB = pymssql.connect(host='DB',user='youruser',password='yourpwd',database='yourDBname') 

编辑:我freetds.conf文件的Python的例子:

host = 'IP' 
port = 1219 
相关问题