我正在尝试创建一个“Reader”替代方案,以使用 Azure ML 中的“执行 python 脚本”模块从 Azure SQL 数据库读取数据。 在此过程中,我尝试使用 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}
这是我收到的错误:
错误:('IM002','[IM002] [Microsoft][ODBC 驱动程序管理器] 未找到数据源名称且未指定默认驱动程序 (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 页面:在 Windows 上使用 Python 连接到 SQL 数据库。它声明使用
pymssql
,但没有提及 pyodbc
。
您需要 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')
我从 Azure 支持那里得到了答复:
目前无法从 SQL Azure 数据库中访问 “执行Python脚本”模块。正如您怀疑的那样,这是由于 执行环境中缺少 odbc 驱动程序。建议 解决方法是 a) 使用阅读器模块或 b) 导出到 blob 并使用 Azure Python SDK 访问这些 blob http://blogs.msdn.com/b/bigdatasupport/archive/2015/10/02/using-azure-sdk-for-python.aspx
因此目前从 Azure-ML 中的“执行 python 脚本”模块连接到 SQL Server 是“不可能”的。如果您想更改,请投票这里