从 Azure ML 中的 pyodbc 连接到 Azure SQL 数据库的驱动程序的名称是什么?

What is the name of the driver to connect to Azure SQL Database from pyodbc in Azure ML?

我正在尝试创建一个“Reader”替代方案,以使用 'Execute python script' 模块从 Azure SQL 数据库中读取数据Azure ML。 在这样做的同时,我正在尝试使用 pyodbc 库连接到 Azure Sql。 这是我的代码:

def azureml_main(dataframe1 = None, dataframe2 = None):
    import pyodbc   
    import pandas as pd

    conn = pyodbc.connect('DRIVER={SQL Server}; SERVER=server.database.windows.net; DATABASE=db_name; UID=user; PWD=Password')
    SQLCommand = ('''select * from table1 ''')
    data_frame = pd.read_sql(SQLCommand, conn)
    return data_frame,

还尝试使用不同的驱动程序名称:{SQL Server Native Client 11.0}

这是我遇到的错误:

Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')

有人知道我应该使用哪个驱动程序吗?

为了确定,我尝试了“{SQL Server}”、“{SQL Server Native Client 11.0}”和“{SQL Server Native Client 10.0}”得到了同样的错误

我也尝试了不同的格式:

conn = pyodbc.connect('DRIVER={SQL Server}; SERVER=server.database.windows.net; DATABASE=db_name; user=user@server; password=Password')

conn = pyodbc.connect('DRIVER={SQL Server Native Client 11.0}; SERVER=server.database.windows.net; DATABASE=db_name; user=user@server; password=Password')

根据,连接字符串应该是:

conn = pyodbc.connect('DRIVER={SQL Server};SERVER=yoursqlAzureServer.database.windows.net,1433', user='yourName@yoursqlAzureServer', password='Password', database='DBName')

注意格式上的差异:用户、密码和数据库的不同参数与第一个字符串中的所有参数。

也相关,请参阅此 Azure 页面:Connect to SQL Database by using Python on Windows。它声明使用 pymssql,但没有提及 pyodbc

连接字符串的最终真相来源 :-) 是:

https://www.connectionstrings.com/sql-azure/

将其用作构建您的指南。

Pyodbc 的 SQL 数据库驱动程序名称应该是 {SQL Server Native Client 10.0},因为以下某些原因。

  1. Azure 门户上显示的 SQL 数据库的连接字符串,请参见下面的图 1 和图 2。

图 1. 在 Azure 旧门户上

图 2. 在 Azure 新门户上(11.0 之后的 v10.0 版本)

  1. 根据the Pyodbc code comments,请看下图3

图3。

您需要 Microsoft ODBC 驱动程序才能使用 pyodbc。您可以从这里下载:https://www.microsoft.com/en-us/download/details.aspx?id=36434。下载后,尝试使用以下连接字符串:

conn = pyodbc.connect('DRIVER={SQL Server Native Client 11.0}; SERVER=server.database.windows.net; DATABASE=db_name; user=user@server; password=Password')

如果这个字符串不起作用,试试这个:

conn = pyodbc.connect('DRIVER={SQL Server};SERVER=server.database.windows.net,1433', user='user@server', password='Password', database='db_name')

如果您仍然无法使用 pyodbc,请告诉我。

干杯,
见面

我得到了 azure 支持的答复:

Currently it is not possible to access sql azure dbs from within an “execute python script” module. As you suspected this is due to missing odbc drivers in the execution environment. Suggested workarounds are to a) use reader module or b) export to blobs and use the Azure Python SDK for accessing those blobs http://blogs.msdn.com/b/bigdatasupport/archive/2015/10/02/using-azure-sdk-for-python.aspx

所以目前不可能从Azure-ML中的“执行python脚本”模块连接到SQL服务器。如果你喜欢改,请投票here