使用pymssql连接到SQL Server实例

11

我正在尝试使用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:连接数据库失败,原因未知。

我相当有信心连接信息是正确的,因为当我使用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 并没有使用 FreeTDS。


基于 @cha0site 的建议,我尝试仅使用主机名,而不是主机名和实例。这导致了相同的错误,但生成错误需要更长的时间(尽管 traceback 仍然指示相同的行)。我指定实例的原因是,除非我指定实例,否则我无法使用 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(仍然是相同的版本)。


我已经撤销了对这个问题所做的编辑。我觉得那些编辑主要是做了一些风格上的改动(虽然我可以接受,但感觉不必要),同时还删除了重要的细节。 - Allan
这不是关于你而是关于未来的Stack Overflow用户。大多数人的母语不是英语,我的风格修改对于学习更好的语法至关重要。再加上你的文本可读性很差。尽管如此,我已经得到了编辑积分。感谢你回复我。 - Ivan
3个回答

0

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

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

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

host = 'IP'
port = 1219

0

若要指定 host=servername\instanceserver=servername\instance,则必须在 SQL Server 机器上启用 SQL Server Browser 服务。


这是一个8年前的问题,我已经没有测试这个答案的环境了。然而,这个答案并没有解释为什么相同的配置在adodbapi中可以工作,但在pymssql中却不能。如果这个解释是问题的根源,那么两个库都不应该能够连接。 - Allan

0

这里可以在我的工作空间上工作 pymssql版本:2.2.8 python版本:3.11

conn = pymssql.connect(host=r'10.0.1.29:60001\sql2019', user='sa', password='sa', charset='UTF-8', atabase=r'database1', tds_version=r'7.0')

如果您使用的是pymssql 2.2.8,tds_version应该设置为7.0。如果您仍然遇到问题,您可以尝试其他tds_version(7.4、7.3、7.2、7.1、7.0...)

您可以添加额外的版本信息和调试代码

print('pymssql version: ', pymssql.__version__)
print('get_dbversion: ', pymssql.get_dbversion())
print('version_info: ', pymssql.version_info())
os.environ['TDSDUMP'] = 'stdout'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接