0

我想在 azure 上实时部署我的模型,所以我计划创建一个图像,它首先在 azure SQL db 中查询一个 ID 以获取所需的功能,然后使用我的模型进行预测并返回预测结果。我从 PyODBC 库得到的错误是未安装驱动程序

我在azure ML jupyter notebook上尝试建立连接,发现环境本身没有安装驱动。经过一些研究,我发现我应该创建一个 docker 映像并将其部署在那里,但我仍然遇到了相同的结果

    driver= '{ODBC Driver 13 for SQL Server}'
    cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password+';Encrypt=yes'+';TrustServerCertificate=no'+';Connection Timeout=30;')

('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 13 for SQL Server' : 找不到文件 (0) (SQLDriverConnect)")

我想要查询的结果,而不是收到此消息

4

3 回答 3

1

和/或您可以使用 pymssql==2.1.1,如果您在部署配置中添加以下 docker 步骤(使用 Environments 或 ContainerImages - 首选是 Environments):

from azureml.core import Environment
from azureml.core.environment import CondaDependencies
conda_dep = CondaDependencies()
conda_dep.add_pip_package('pymssql==2.1.1')
myenv = Environment(name="mssqlenv")
myenv.python.conda_dependencies=conda_dep
myenv.docker.enabled = True
myenv.docker.base_dockerfile = 'FROM mcr.microsoft.com/azureml/base:latest\nRUN apt-get update && apt-get -y install freetds-dev freetds-bin vim gcc'
myenv.docker.base_image = None

或者,如果您使用的是 ContainerImage 类,您可以添加这些 Docker 步骤

from azureml.core.image import Image, ContainerImage
image_config = ContainerImage.image_configuration(runtime= "python", execution_script="score.py", conda_file="myenv.yml", docker_file="Dockerfile.steps")
# Assuming this : 
# RUN apt-get update && apt-get -y install freetds-dev freetds-bin vim gcc
# is in a file called Dockerfile.steps, it should produce the same result.

有关我如何使用 Estimator Step 和自定义 docker 容器完成此操作的更多详细信息,请参阅此答案。您可以使用此 Dockerfile 在本地为该 Estimator 步骤创建一个 Docker 容器(如果您只是使用在管道之外运行的 Estimator,则无需这样做):

FROM continuumio/miniconda3:4.4.10
RUN apt-get update && apt-get -y install freetds-dev freetds-bin gcc
RUN pip install Cython

有关更多详细信息,请参阅此帖子:使用自定义 docker 图像在管道中使用估算器。希望有帮助!

于 2019-10-08T19:17:30.963 回答
0

根据我的经验,我认为@DavidBrowne-Microsoft 所说的评论是正确的。

在我回答的 Jupyter Notebook 中连接到 sql DB 时,有一个类似的 SO 线程出现错误,我认为这将帮助您msodbcsql在 Microsoft Azure Notebook 或 Docker 上安装适用于 Linux 的最新驱动程序。

同时,您需要仔细注意有关 Azure SQL 数据库连接字符串的详细信息{ODBC Driver 17 for SQL Server}{ODBC Driver 13 for SQL Server}如果您的 Azure SQL 数据库是最近创建的,则应使用该连接字符串(忽略 Azure 门户中显示的连接字符串)。

于 2019-10-09T17:42:52.793 回答
0

您可以使用 AzureML 内置的解决方案数据集连接到您的 SQL 服务器。为此,您可以先创建一个 azure_sql_database 数据存储。参考这里

然后通过传递您创建的数据存储和要运行的查询来创建数据集。 参考这里

示例代码

from azureml.core import Dataset, Datastore, Workspace

workspace = Workspace.from_config()

sql_datastore = Datastore.register_azure_sql_database(workspace = workspace,
                                                      datastore_name = 'sql_dstore', 
                                                      server_name = 'your SQL server name', 
                                                      database_name = 'your SQL database name', 
                                                      tenant_id = 'your directory ID/tenant ID of the service principal', 
                                                      client_id = 'the Client ID/Application ID of the service principal', 
                                                      client_secret = 'the secret of the service principal')

sql_dataset = Dataset.Tabular.from_sql_query((sql_datastore, 'SELECT * FROM my_table'))

您也可以通过ml.azure.com上的 UI 进行此操作,您可以在其中使用您的用户名和密码注册一个 azure SQL 数据存储。

在此处输入图像描述

于 2019-10-08T17:46:51.040 回答