我正在尝试使用 pymssql(版本 2.0.0b1-dev-20111019,使用 Python 2.7.1)从 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
我尝试将端口号添加到主机参数中,结果相同。有人对如何解决这个问题有建议吗?
顺便说一句,我已经阅读了“无法通过 pymssql 连接到 SQL Server http://stackoverflow.com/questions/4150524/unable-to-connect-to-sql-server-via-pymssqlOP 最终通过正确配置 FreeTDS 解决了他的问题,据我所知,Windows 上的 pymssql 不使用 FreeTDS。
根据 @cha0site 的建议,我尝试仅使用主机名,而不是主机名和实例。这导致了相同的错误,但似乎需要更长的时间才能生成错误(尽管回溯仍然指示同一行)。我指定实例的原因是,除非指定实例,否则我无法使用 SSMS 进行连接,因此我认为其他连接也需要它。
我现在也尝试过pymssql.connect(host='servername', user='username', password='userpassword', database='instance')
具有相同的结果(基于@Sid的评论)。基于pymssql 文档 http://code.google.com/p/pymssql/wiki/PymssqlModuleReference,我相信database
参数用于指定用户要连接的初始数据库,而不是实例。
需要澄清的是,“实例”是 SQL Server 安装期间提供的名称,而不是该安装中的数据库。我认为 pymssql 可能不支持此表示法,因此我将考虑重新配置 SQL Server 实例,以便不需要它。
我现在已将 SQL Server 重新安装为默认实例,而不是命名实例,这样我就可以在不指定实例名称的情况下进行连接。adodbapi
仍然有效(没有/instance
), but pymssql
仍然返回相同的错误。我也删除并重新安装pymssql
来自新下载的存档(仍然是相同的版本)。