pyodbc.OperationalError:('HYT00',u'[HYT00] [unixODBC] [Microsoft] [用于SQL Server的ODBC驱动程序13]登录超时已过期(0)(SQLDriverConnect)')

时间:2019-01-07 07:04:45

标签: python sql-server linux pyodbc

使用SQL Server Management Studio(SSMS)Express,我可以找到数据库并进行连接。

但是当我使用pyodbc通过以下方式连接到同一服务器时:

    import pyodbc
    Server = r"xxxER\xxxSQLSERV"
    db = "xxxDB"
    user = "xxx"
    password = "xxxx"
    conn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server + ';DATABASE=' + db +';UID=' + user + ';PWD=' + password)

通过在本地使用Pyhton,我可以进行连接,但是当我在linux服务器中尝试获得低于错误的值时

pyodbc.OperationalError: ('HYT00', u'[HYT00] [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]Login timeout expired (0) (SQLDriverConnect)')

我也尝试使用ODBC Driver 17 for SQL Server,但是也遇到了同样的问题。任何人都可以在这方面给我建议。

5 个答案:

答案 0 :(得分:1)

我遇到了这个问题,并在 here中解决了我的问题。 只需添加版本即可。

 <referenceBlock name="breadcrumbs">
    <action method="addCrumb">
        <argument name="crumbName" xsi:type="string">Home</argument>
        <argument name="crumbInfo" xsi:type="array">
            <item name="title" xsi:type="string" translate="true">Home</item>
            <item name="label" xsi:type="string" translate="true">Home</item>
            <item name="link" xsi:type="string">/</item>
        </argument>
    </action>
 </referenceBlock>

如果不起作用,则将版本17更改为13,如果不更改为11。 List versions of ODBC.

答案 1 :(得分:0)

用于Linux的Microsoft SQL Server ODBC驱动程序无法解析实例名称。您可以使用免费的sqlserverport模块来获取相应的端口号,并使用该端口号进行连接。

答案 2 :(得分:0)

尝试从服务器上删除实例并将其设置为

Server = "xxxER"

,或者如果您有端口号,则将其附加为

Server = "xxxER,portNo"

答案 3 :(得分:0)

检查您的mssql网络配置,我的问题在那里。

为所有IP启用端口1433。

现在正在使用IP和主机名。

答案 4 :(得分:0)

我使用 SSH 隧道,远程服务器端口转发到 localhost,1433。如果使用该方法,此 pyodbc 连接会间歇性失败:

cnxn = pyodbc.connect('driver={ODBC Driver 17 for SQL Server};Server=localhost, 1433;'...

用 127.0.0.1 替换 localhost 似乎一直在工作

cnxn = pyodbc.connect('driver={ODBC Driver 17 for SQL Server};Server=127.0.0.1, 1433;'

顺便说一句,使用 Ruby 和 FreeTDS 也做了同样的事情,并且 Localhost,1433 一直都在工作.. 必须是 pyodbc 包中的某些东西或他们的方法有时会丢失一些信息以使服务器上的 DBMS 无法响应/超时