在Windows上使用pymssql连接到SQL Server实例

时间:2012-02-06 18:14:23

标签: python sql-server pymssql

我正在尝试使用pymssql(带有Python 2.7.1的版本2.0.0b1-dev-20111019)从Windows框连接到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

我尝试将端口号添加到host参数,结果相同。有没有人建议如何解决这个问题?


顺便说一句,我已阅读“Unable to connect to SQL Server via pymssql”的回复。 OP最终通过正确配置FreeTDS解决了他的问题,据我所知,在Windows上pymssql没有使用它。


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


我现在也尝试了pymssql.connect(host='servername', user='username', password='userpassword', database='instance')同样的结果(基于@Sid的评论)。根据{{​​3}},我相信database参数用于指定用户要连接的初始数据库,而不是实例。

为了澄清,“instance”是安装SQL Server时提供的名称,而不是该安装中的数据库。我发现pymssql可能不支持这种表示法,因此我将研究重新配置SQL Server实例,以便它不是必需的。


我现在已经将SQL Server重新安装为默认实例,而不是命名实例,这允许我在不指定实例名称的情况下进行连接。 adodbapi仍然有效(没有/instance),但pymssql仍会返回相同的错误。我还从新下载的存档中移除并重新安装了pymssql(仍然是相同的版本)。

2 个答案:

答案 0 :(得分:0)

检查你的freetds.conf文件,看看你是否设置了端口 1219 。然后再次检查连接:

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

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

host = 'IP'
port = 1219

答案 1 :(得分:0)

要指定 host=servername\instanceserver=servername\instanceSQL服务器浏览器服务必须在 SQL Server 机器上。