All*_*lan 8 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')
Run Code Online (Sandbox Code Playgroud)
为此,我得到了非常有用的错误: 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
Run Code Online (Sandbox Code Playgroud)
我尝试将端口号添加到host参数,结果相同.有没有人建议如何解决这个问题?
顺便说一句,我已阅读" 无法通过pymssql连接到SQL Server "的响应.OP最终通过正确配置FreeTDS解决了他的问题,据我所知,在Windows上pymssql没有使用它.
根据@ cha0site的建议,我尝试仅使用主机名,而不是主机名和实例.这导致了相同的错误,但似乎需要更长的时间来生成错误(尽管回溯仍然指示相同的行).我一直在指定实例的原因是我无法使用SSMS进行连接,除非我指定了实例,因此我认为它对于其他连接是必要的.
我现在也试过pymssql.connect(host='servername', user='username', password='userpassword', database='instance')相同的结果(基于@Sid的评论).基于pymssql文档,我相信该database参数用于指定用户要连接的初始数据库,而不是实例.
只是为了澄清,"实例"是安装SQL Server时提供的名称,而不是该安装中的数据库.我发现pymssql可能不支持这种表示法,因此我将研究重新配置SQL Server实例,以便它不是必需的.
我现在重新安装SQL Server作为默认实例,而不是命名实例,它允许我连接而不指定实例名称.adodbapi仍然有效(没有/instance),但pymssql仍然返回相同的错误.我还pymssql从新下载的存档(仍然是相同的版本)中删除并重新安装.
检查你的 freetds.conf 文件,看看你是否设置了端口1219,然后再次检查连接:
DB = pymssql.connect(host='DB',user='youruser',password='yourpwd',database='yourDBname')
Run Code Online (Sandbox Code Playgroud)
编辑:我的 freetds.conf 文件 Python 的示例:
host = 'IP'
port = 1219
Run Code Online (Sandbox Code Playgroud)