使用 pymssql 连接到 SQL Server 实例
Posted
技术标签:
【中文标题】使用 pymssql 连接到 SQL Server 实例【英文标题】:Connect to SQL Server instance using pymssql 【发布时间】:2012-02-06 18:14:23 【问题描述】:我正在尝试使用 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
我尝试将端口号添加到主机参数,结果相同。有人对如何解决此问题有建议吗?
顺便说一句,我已经阅读了“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 的评论)。基于pymssql documentation,我相信database
参数是用来指定用户要连接的初始数据库,而不是实例。
澄清一下,“实例”是安装 SQL Server 时提供的名称,而不是安装中的数据库。我突然想到 pymssql 可能不支持这种表示法,所以我会考虑重新配置 SQL Server 实例,使其不再需要。
我现在已将 SQL Server 重新安装为默认实例,而不是命名实例,这样我就可以在不指定实例名称的情况下进行连接。 adodbapi
仍然有效(没有 /instance
),但 pymssql
仍然返回相同的错误。我还从新下载的存档中删除并重新安装了pymssql
(仍然是相同的版本)。
【问题讨论】:
可以选择我的答案作为答案吗?感谢您的宝贵时间。 我已经回滚了对这个问题所做的编辑。我觉得这些编辑主要是进行了风格上的改变(我可以接受,但觉得没有必要),但也删除了显着的细节。 这不是关于你,而是关于未来的 Stack Overflow 用户。大多数人的母语不是英语,而我的文体变化是学习更好语法的关键。再加上你的文本的可读性很差。尽管如此,我还是得到了编辑的意见。感谢您回复我。 【参考方案1】:检查你的 freetds.conf 文件,看看你是否设置了端口1219。然后再次检查连接:
DB = pymssql.connect(host='DB',user='youruser',password='yourpwd',database='yourDBname')
编辑:我的 freetds.conf 文件 Python 示例:
host = 'IP'
port = 1219
【讨论】:
【参考方案2】:要指定 host=servername\instance 或 server=servername\instance,SQL服务器浏览器服务必须在 SQL Server 机器上。
【讨论】:
这是一个有 8 年历史的问题,我知道不再有环境来测试这个答案。但是,这个答案无法解释我在adodbapi
中使用的相同配置,但在pymssql
中却没有。如果这个解释是问题的根源,那么这两个库都不应该能够连接。以上是关于使用 pymssql 连接到 SQL Server 实例的主要内容,如果未能解决你的问题,请参考以下文章
Pymssql 无法连接到 Amazon Linux 2 上的 Azure SQL Server
无法使用 pyodbc/pymssql 和 Robot Framework 连接到 SQL\Express