适用于: SQL Server 2019 (15.x) 及更高版本
Azure SQL 托管实例
本文介绍了如何使用sqlmlutils包中的函数,将新的Python包安装到SQL Server上的机器学习 Services实例中。 你可以用Python脚本中安装的包,这些脚本通过 sp_execute_external_script T-SQL 语句在数据库内运行。
本文介绍如何使用 sqlmlutils 包中的函数将新的 Python 包安装到 Azure SQL 托管实例机器学习服务实例。 你可以用Python脚本中安装的包,这些脚本通过 sp_execute_external_script T-SQL 语句在数据库内运行。
注意
你无法更新或卸载预装在 SQL 托管实例 机器学习 服务实例上的包。 若要查看当前已安装的包列表,请参阅列出所有已安装的 Python 包。
有关包位置和安装路径的详细信息,请参阅获取 Python 包信息。
注意
使用本文中描述的 sqlmlutils 包,将 Python 包添加到 SQL Server 2019 及以后版本。 对于 SQL Server 2017 及更早版本,请参阅使用 Python 工具安装包。
先决条件
- 已安装了 Python 语言选项的SQL Server 机器学习服务
Python安装在你用来连接SQL Server的客户端电脑上。 你可以从命令行运行脚本,或者使用带有Python扩展的Python开发环境,比如Visual Studio Code。
客户端电脑上的 Python 版本必须与服务器端的 Python 版本一致,而你安装的包也必须与你现有的 Python 版本兼容。 若要了解每个 SQL Server 版本包含哪个 Python 版本,请参阅 Python 和 R 版本。
若要验证特定 SQL Server 实例上的 Python 版本,请使用以下 T-SQL 命令。
EXECUTE sp_execute_external_script @language = N'Python', @script = N' import sys print(sys.version) '安装在用于连接 SQL Server 的客户端计算机上的适用于 Visual Studio Code 的 MSSQL 扩展。 可以使用其他数据库管理或查询工具。
其他注意事项
Python 包库位于你 SQL Server 实例的 Program Files 文件夹里。 默认情况下,安装在此文件夹需要管理员权限。 有关更多信息,请参阅程序包库位置。
包安装取决于你提供给 sqlmlutils 的连接信息中指定的 SQL 实例、数据库和用户。 要在多个SQL实例或数据库中使用该包,或针对不同用户,请为每个实例安装该包。 例外是安装在 公共 范围的包,所有用户共享。 sqlmlutils 默认仅在你以
sysadmin服务器角色成员身份连接时选择公用范围,否则选择私有范围。 若要以其他主体的身份安装到公共范围,请将scope=sqlmlutils.Scope.public_scope()传递给install;这需要db_owner数据库角色。 如果用户安装了公开包的新版本,公共包不受影响,但该用户可以访问新版本。在添加包之前,请考虑该包是否适合 SQL Server 环境。
在数据库中使用 Python 来完成那些需要与数据库引擎紧密集成的任务,比如机器学习,而不是简单地查询数据库的任务。
如果你添加的包对服务器造成过大计算压力,性能就会下降。
在加固的 SQL Server 环境中,避免使用以下类型的包:
- 需要网络访问权限的包
- 需要提升的文件系统访问权限的软件包
- 用于 Web 开发或其他在 SQL Server 中运行并无益处的任务的包
你不能用 sqlmlutils 安装 Python 包 tensorflow。 有关详细信息和解决方法,请参阅 SQL Server 机器学习服务中的已知问题。
在客户端计算机上安装 sqlmlutils
若要使用 sqlmlutils,首先需要将其安装在用于连接到 SQL Server 的客户端计算机上。
在线安装 sqlmlutils
如果客户端电脑有互联网连接,请使用pip安装sqlmlutils:
pip install sqlmlutils
脱机安装 sqlmlutils
如果客户端电脑无法上网,可以从下载的文件安装 sqlmlutils :
确保你安装了 PIP 。 更多信息,请参见 pip 安装。
从SQLMLUTILS发布页面下载最新的sqlmlutils文件到客户端计算机。 请勿解压缩文件。
打开 命令提示字元 ,并执行以下命令安装 sqlmlutils 包。 把你下载的文件的完整路径替换掉。 本例假设下载的文件为
c:\temp\sqlmlutils-1.0.0.zip。pip install --upgrade --upgrade-strategy only-if-needed c:\temp\sqlmlutils-1.0.0.zip
在 SQL Server 上添加 Python 包
通过使用 sqlmlutils,你可以将 Python 包添加到 SQL 实例中,然后在该实例中运行的 Python 代码中使用它们。 sqlmlutils 使用 CREATE EXTERNAL LIBRARY 安装该包及其每个依赖项。
以下示例将文本工具包添加到 SQL Server 中。
在线添加程序包
如果你用来连接 SQL Server 的客户端电脑有互联网访问权限,你可以使用 sqlmlutils 在线查找 text-tools 包和任何依赖,然后远程将包安装到 SQL Server 实例中。
在客户端计算机上,打开 Python 或 Python 环境。
使用以下命令安装 text-tools 包。 替换你自己的 SQL Server 数据库连接信息(如果使用 Windows 身份验证,无需
uid和pwd参数)。
在客户端计算机上,打开 Python 或 Python 环境。
使用以下命令安装 text-tools 包。 请替换为您自己的 SQL Server 数据库连接信息。 还要传递客户端计算机上安装的 ODBC 驱动程序名称,
driver="ODBC Driver 18 for SQL Server"例如 ,因为 sqlmlutils 默认使用的驱动名称仅适用于 Windows。
import sqlmlutils
connection = sqlmlutils.ConnectionInfo(server="server", database="database", uid="username", pwd="password")
sqlmlutils.SQLPackageManager(connection).install("text-tools")
离线添加包
如果你用来连接SQL Server的客户端电脑没有网络连接,可以在有网络连接的电脑上使用pip,将包下载到本地文件夹。 然后你把文件夹复制到客户端电脑,离线安装包。
注意
此过程适用于无依赖项的包。
SQLPackageManager.install() 即使你传递本地 .whl 文件,也能解决 PyPI 的依赖,因此要添加带有依赖的包,请使用有互联网连接的客户端电脑,并按照 “在线添加包”操作。
在有网络连接的电脑上
打开“命令提示符”,运行以下命令以创建包含 text-tools 包的本地文件夹 。 此示例将创建文件夹
c:\temp\text-tools。pip download text-tools -d c:\temp\text-tools将
text-tools文件夹复制到客户端计算机。 以下示例假定已将其复制到c:\temp\packages\text-tools。
在客户端计算机上
用 sqlmlutils 安装 pip 下载的包(.whl文件)到本地文件夹。
在这个例子中, text-tools 没有依赖关系,因此 text-tools 文件夹只存放一个文件。
运行以下 Python 脚本。 替换包的实际文件路径和名称,以及你自己的 SQL Server 数据库连接信息(如果使用 Windows 身份验证,无需 uid 和 pwd 参数)。
运行以下 Python 脚本。 替换包的实际文件路径和名称,以及你自己的 SQL Server 数据库连接信息。 还要传递客户端计算机上安装的 ODBC 驱动程序名称,driver="ODBC Driver 18 for SQL Server"例如 ,因为 sqlmlutils 默认使用的驱动名称仅适用于 Windows。
import sqlmlutils
connection = sqlmlutils.ConnectionInfo(server="yourserver", database="yourdatabase", uid="username", pwd="password")
sqlmlutils.SQLPackageManager(connection).install("text_tools-1.0.0-py3-none-any.whl")
使用包
现在可以在 SQL Server 的 Python 脚本中使用该包。 例如:
EXECUTE sp_execute_external_script
@language = N'Python',
@script = N'
from text_tools.finders import find_best_string
corpus = "Lorem Ipsum text"
query = "Ipsum"
first_match = find_best_string(query, corpus)
print(first_match)
'
从 SQL Server 中删除包
要移除text-tools包,请在客户端电脑上使用之前定义的连接变量运行以下Python命令。
sqlmlutils.SQLPackageManager(connection).uninstall("text-tools")
sqlmlutils 的更多函数
sqlmlutils 包包含多个用于管理 Python 包、创建、管理和运行 SQL Server 存储过程和查询的功能。 更多信息请参见 sqlmlutils 的 Python README 文件。
有关 sqlmlutils 中任何函数的信息,请使用 Python 的 help 函数。 例如:
import sqlmlutils
help(sqlmlutils.SQLPackageManager.install)