【问题标题】:pyodbc cannot connect to on-premises MSSQL serverpyodbc 无法连接到本地 SQL 服务器
【发布时间】:2019-04-30 08:16:40
【问题描述】:

我想在 Debian8 主机上使用 pyodbc 从 Python 连接到 MSSQL server2012。当前代码已适用于 Azure SQL 服务器,但不适用于本地 SQL 服务器。 连接字符串如下所示:

import pyodbc

server = 'IP' 
database = 'DB_Name'
username = 'user'
password = 'pass'
driver = '{ODBC Driver 17 for SQL Server}'

cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password)

我不得不使用 IP 地址,因为我无法通过名称访问 SQL 服务器。我可以在 Windows 机器上使用 SSMS 连接到服务器。我也尝试过以下组合:

server='sqlservername\instancename'
server='IP, port'
server='IP\instancename'
driver='SQL Server'
Integrated_Security=false;
Trusted_Connection=no;

但他们都没有工作。我在注册用户时遇到登录超时或错误。我在 windows 机器上运行相同的 python 代码没有任何问题。

【问题讨论】:

  • 因此,您在 Debian8 机器上运行 Python+pyodbc,您可以连接到云中的 Azure SQL 实例,但无法连接到在另一台 (Windows) 机器上运行的 SQL Server 实例您的本地网络 (LAN)。这是否准确地描述了问题?如果是,您是否验证了 SQL Server 的 LAN 实例启用了 TCP/IP 连接?
  • 嗨 @GordThompson 是的,这就是问题描述,实际上我可以从 DotNet 应用程序中的 Linux(Debian9)机器连接到那个 MSSQL 实例(连接到同一实例上的另一个数据库)并且它可以工作.

标签: python-3.x sql-server-2012 debian pyodbc


【解决方案1】:

我终于找到了正确的组合。除了感谢@GordThompson,TCP/IP 已启用,但在另一个端口上。

import pyodbc

server = 'IP\InstanceName, port' 
database = 'DB_Name'
username = 'user'
password = 'pass'
driver = '{ODBC Driver 17 for SQL Server}'

cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)

【讨论】:

    猜你喜欢
    • 2017-12-09
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多