在Jupyter Notebook中连接到SQL DB时出现错误

时间:2019-07-03 09:15:09

标签: python azure jupyter-notebook azure-active-directory azure-sql-database

在与SQL DB连接时在jupyter上遇到以下代码的问题。

    con = pyodbc.connect('Driver={ODBC Driver 13 for SQL 
    Server};Server='+server+';Database='+database+';Uid='+username+'
    ;Pwd='+passwor 
    d+';Encrypt=yes;TrustServerCertificate=no;Connection 
    Timeout=30;Authentication=ActiveDirectoryPassword')

    Error Description Below:
    OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 13 for SQL 
    Server]SSL Provider: [error:140A90F1:lib(20):func(169):reason(241)] (-1) 
    (SQLDriverConnect)')

1 个答案:

答案 0 :(得分:0)

假设您使用的是Microsoft Azure Notebooks,我尝试成功重现您的问题,如下所示。

enter image description here

这是由您使用的连接字符串引起的。

在Azure门户上,您将看到三个ODBC连接字符串,如下图。

enter image description here

很明显,您正在尝试使用第二个,该第二个需要Azure Active Directory帐户的用户名和密码,如官方文档Using Azure Active Directory with the ODBC Driver

所示。

enter image description here

并且根据同一文档,ODBC驱动程序版本13.1似乎不支持这种身份验证方式,请更改为将ODBC驱动程序版本17与{ODBC Driver 17 for SQL Server}一起使用。

enter image description here

首先,请检查已安装的msodbcsql17

enter image description here

但是,我尝试使用msodbcsql17进行连接,但由于登录超时错误而失败。甚至我也尝试通过pyodbc

3.1.14.0.26升级到!pip install pyodbc --upgrade

enter image description here

因此,如果必须对SQL数据库连接的AAD进行身份验证,请尝试并可能获得成功的连接。或切换到第一种连接方式,使用SQL数据库用户名和密码通过pyodbc==3.1.1(升级到4.0.26会导致另一个错误)和{ODBC Driver 13 for SQL Server}进行连接,它对我有用。 / p>

enter image description here

希望有帮助。