Hướng dẫn python run external script - python chạy tập lệnh bên ngoài

Chuyển đến nội dung chính

Trình duyệt này không còn được hỗ trợ nữa.

Hãy nâng cấp lên Microsoft Edge để tận dụng các tính năng mới nhất, bản cập nhật bảo mật và hỗ trợ kỹ thuật.

QuickStart: Chạy tập lệnh Python đơn giản với máy học SQL

  • Bài viết
  • 05/24/2022
  • 5 Phú

Trong bài viết nào

Áp dụng cho: SQL Server 2017 (14.x) và sau đó là phiên bản Azure SQL được quản lý

Hướng dẫn python run external script - python chạy tập lệnh bên ngoài
SQL Server 2017 (14.x) and later Azure SQL Managed Instance

Trong QuickStart này, bạn sẽ chạy một tập hợp các tập lệnh Python đơn giản bằng các dịch vụ học máy SQL Server, Dịch vụ học máy thể hiện được quản lý của Azure SQL hoặc các cụm dữ liệu lớn của SQL Server. Bạn sẽ tìm hiểu cách sử dụng quy trình được lưu trữ sp_execute_external_script để thực thi tập lệnh trong phiên bản SQL Server.

Điều kiện tiên quyết

Bạn cần các điều kiện tiên quyết sau đây để chạy nhanh này.

  • Cơ sở dữ liệu SQL trên một trong những nền tảng này:

    • Dịch vụ học máy SQL Server. Để cài đặt, hãy xem Hướng dẫn cài đặt Windows hoặc Hướng dẫn cài đặt Linux.
    • SQL Server 2019 Các cụm dữ liệu lớn. Xem cách bật các dịch vụ học máy trên các cụm dữ liệu lớn SQL Server 2019.
    • Azure SQL Dịch vụ học máy thể hiện được quản lý SQL. Để biết thông tin, hãy xem Tổng quan về Dịch vụ học máy được quản lý của Azure SQL.
  • Một công cụ để chạy các truy vấn SQL có chứa các tập lệnh Python. QuickStart này sử dụng Azure Data Studio.

Chạy một tập lệnh đơn giản

Để chạy tập lệnh Python, bạn sẽ chuyển nó như một đối số cho quy trình được lưu trữ của hệ thống, sp_execute_external_script. Quy trình được lưu trữ hệ thống này bắt đầu thời gian chạy Python trong bối cảnh học máy SQL, chuyển dữ liệu cho Python, quản lý các phiên người dùng Python một cách an toàn và trả về bất kỳ kết quả nào cho khách hàng.

Trong các bước sau, bạn sẽ chạy ví dụ này tập lệnh Python trong cơ sở dữ liệu của bạn:

a = 1
b = 2
c = a/b
d = a*b
print(c, d)
  1. Mở cửa sổ Truy vấn mới trong Azure Data Studio được kết nối với phiên bản SQL của bạn.Azure Data Studio connected to your SQL instance.

  2. Chuyển tập lệnh Python hoàn chỉnh cho thủ tục được lưu trữ

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
    a = 1
    b = 2
    c = a/b
    d = a*b
    print(c, d)
    '
    
    3.

    Kịch bản được truyền qua đối số

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
    a = 1
    b = 2
    c = a/b
    d = a*b
    print(c, d)
    '
    
    4. Tất cả mọi thứ bên trong đối số
    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
    a = 1
    b = 2
    c = a/b
    d = a*b
    print(c, d)
    '
    
    4 phải là mã Python hợp lệ.

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
    a = 1
    b = 2
    c = a/b
    d = a*b
    print(c, d)
    '
    
  3. Kết quả chính xác được tính toán và hàm Python

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
    a = 1
    b = 2
    c = a/b
    d = a*b
    print(c, d)
    '
    
    6 trả về kết quả cho cửa sổ Tin nhắn.Messages window.

    Nó sẽ trông giống như thế này.

    Kết quả

    STDOUT message(s) from external script:
    0.5 2
    

Chạy kịch bản Hello World

Một tập lệnh ví dụ điển hình là một tập lệnh chỉ xuất ra chuỗi "Hello World". Chạy lệnh sau.

EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'OutputDataSet = InputDataSet'
    , @input_data_1 = N'SELECT 1 AS hello'
WITH RESULT SETS(([Hello World] INT));
GO

Đầu vào cho thủ tục được lưu trữ

EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
a = 1
b = 2
c = a/b
d = a*b
print(c, d)
'
3 bao gồm:

Đầu vàoSự mô tả
@language Xác định phần mở rộng ngôn ngữ để gọi, trong trường hợp này là Python
@script Xác định các lệnh được truyền cho thời gian chạy Python. Toàn bộ tập lệnh Python của bạn phải được đính kèm trong đối số này, dưới dạng văn bản Unicode. Bạn cũng có thể thêm văn bản vào một biến của loại nvarchar và sau đó gọi biếnnvarchar and then call the variable
@input_data_1 dữ liệu được trả về bởi truy vấn, được chuyển cho thời gian chạy Python, trả về dữ liệu dưới dạng khung dữ liệu
Với các bộ kết quảmệnh đề xác định lược đồ của bảng dữ liệu được trả về cho máy học SQL, thêm "Hello World" làm tên cột, int cho kiểu dữ liệuint for the data type

Lệnh xuất ra văn bản sau:

Chào thế giới
1

Sử dụng đầu vào và đầu ra

Theo mặc định,

EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
a = 1
b = 2
c = a/b
d = a*b
print(c, d)
'
3 chấp nhận một bộ dữ liệu duy nhất làm đầu vào, thông thường bạn cung cấp dưới dạng truy vấn SQL hợp lệ. Sau đó, nó trả về một khung dữ liệu Python duy nhất làm đầu ra.

Hiện tại, hãy sử dụng các biến đầu vào và đầu ra mặc định của

EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
a = 1
b = 2
c = a/b
d = a*b
print(c, d)
'
3: InputDataSet và OutputDataSet.InputDataSet and OutputDataSet.

  1. Tạo một bảng nhỏ dữ liệu thử nghiệm.

    CREATE TABLE PythonTestData (col1 INT NOT NULL)
    
    INSERT INTO PythonTestData
    VALUES (1);
    
    INSERT INTO PythonTestData
    VALUES (10);
    
    INSERT INTO PythonTestData
    VALUES (100);
    GO
    
  2. Sử dụng câu lệnh

    STDOUT message(s) from external script:
    0.5 2
    
    0 để truy vấn bảng.

    SELECT *
    FROM PythonTestData
    

    Kết quả

    Hướng dẫn python run external script - python chạy tập lệnh bên ngoài

  3. Chạy kịch bản Python sau đây. Nó lấy dữ liệu từ bảng bằng câu lệnh

    STDOUT message(s) from external script:
    0.5 2
    
    0, truyền nó qua thời gian chạy Python và trả về dữ liệu dưới dạng khung dữ liệu. Mệnh đề
    STDOUT message(s) from external script:
    0.5 2
    
    2 xác định lược đồ của bảng dữ liệu được trả về cho SQL, thêm tên cột newColname.

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'OutputDataSet = InputDataSet;'
        , @input_data_1 = N'SELECT * FROM PythonTestData;'
    WITH RESULT SETS(([NewColName] INT NOT NULL));
    

    Kết quả

    Hướng dẫn python run external script - python chạy tập lệnh bên ngoài

  4. Bây giờ thay đổi tên của các biến đầu vào và đầu ra. Tên biến đầu vào và đầu ra mặc định là InputDataSet và OutputDataSet, tập lệnh sau đây thay đổi tên thành SQL_IN và SQL_OUT:InputDataSet and OutputDataSet, the following script changes the names to SQL_in and SQL_out:

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'SQL_out = SQL_in;'
        , @input_data_1 = N'SELECT 12 as Col;'
        , @input_data_1_name  = N'SQL_in'
        , @output_data_1_name = N'SQL_out'
    WITH RESULT SETS(([NewColName] INT NOT NULL));
    

    Lưu ý rằng Python nhạy cảm trường hợp. Các biến đầu vào và đầu ra được sử dụng trong tập lệnh Python (sql_out, sql_in) cần phải khớp các tên được xác định với

    STDOUT message(s) from external script:
    0.5 2
    
    3 và
    STDOUT message(s) from external script:
    0.5 2
    
    4, bao gồm cả trường hợp.SQL_out, SQL_in) need to match the names defined with
    STDOUT message(s) from external script:
    0.5 2
    
    3 and
    STDOUT message(s) from external script:
    0.5 2
    
    4, including case.

    Mẹo

    Chỉ có thể truyền một bộ dữ liệu đầu vào dưới dạng tham số và bạn chỉ có thể trả về một bộ dữ liệu. Tuy nhiên, bạn có thể gọi các bộ dữ liệu khác từ bên trong mã Python của mình và bạn có thể trả về các loại đầu ra của các loại khác ngoài bộ dữ liệu. Bạn cũng có thể thêm từ khóa đầu ra vào bất kỳ tham số nào để trả về kết quả.

  5. Bạn cũng có thể tạo các giá trị chỉ bằng cách sử dụng tập lệnh Python mà không có dữ liệu đầu vào (

    STDOUT message(s) from external script:
    0.5 2
    
    5 được đặt thành trống).

    Tập lệnh sau đây xuất bản văn bản "Xin chào" và "Thế giới".

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
    import pandas as pd
    mytextvariable = pandas.Series(["hello", " ", "world"]);
    OutputDataSet = pd.DataFrame(mytextvariable);
    '
        , @input_data_1 = N''
    WITH RESULT SETS(([Col1] CHAR(20) NOT NULL));
    

    Kết quả

    Hướng dẫn python run external script - python chạy tập lệnh bên ngoài
    @Script dưới dạng đầu vào " />

Mẹo

Chỉ có thể truyền một bộ dữ liệu đầu vào dưới dạng tham số và bạn chỉ có thể trả về một bộ dữ liệu. Tuy nhiên, bạn có thể gọi các bộ dữ liệu khác từ bên trong mã Python của mình và bạn có thể trả về các loại đầu ra của các loại khác ngoài bộ dữ liệu. Bạn cũng có thể thêm từ khóa đầu ra vào bất kỳ tham số nào để trả về kết quả.this script will produce an error:

EXECUTE sp_execute_external_script @language = N'Python'
      , @script = N'
      import pandas as pd
      mytextvariable = pandas.Series(["hello", " ", "world"]);
      OutputDataSet = pd.DataFrame(mytextvariable);
      '
      , @input_data_1 = N''
WITH RESULT SETS(([Col1] CHAR(20) NOT NULL));

Bạn cũng có thể tạo các giá trị chỉ bằng cách sử dụng tập lệnh Python mà không có dữ liệu đầu vào (STDOUT message(s) from external script: 0.5 2 5 được đặt thành trống).

Tập lệnh sau đây xuất bản văn bản "Xin chào" và "Thế giới".

EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
a = 1
b = 2
c = a/b
d = a*b
print(c, d)
'
0

@Script dưới dạng đầu vào " />Messages window. In the example output below, you can see that in this case, Python version 3.5.2 is installed.

Kết quả

EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
a = 1
b = 2
c = a/b
d = a*b
print(c, d)
'
1

Python sử dụng không gian hàng đầu để tuyên bố nhóm. Vì vậy, khi tập lệnh Python được nhúng kéo dài nhiều dòng, như trong tập lệnh trước, đừng cố gắng thụt các lệnh Python phù hợp với các lệnh SQL. Ví dụ: tập lệnh này sẽ tạo ra một lỗi:

Kiểm tra phiên bản Python

Nếu bạn muốn xem phiên bản Python nào được cài đặt trong máy chủ của bạn, hãy chạy tập lệnh sau.

EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
a = 1
b = 2
c = a/b
d = a*b
print(c, d)
'
2

Hàm Python

EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
a = 1
b = 2
c = a/b
d = a*b
print(c, d)
'
6 trả lại phiên bản cho cửa sổ Tin nhắn. Trong đầu ra ví dụ bên dưới, bạn có thể thấy rằng trong trường hợp này, Python phiên bản 3.5.2 được cài đặt.

Liệt kê các gói Python

Microsoft cung cấp một số gói Python được cài đặt sẵn các dịch vụ học máy trong SQL Server 2016 (13.x), SQL Server 2017 (14.x) và SQL Server 2019 (15.x). Trong SQL Server 2022 (16.x) Xem trước, bạn có thể tải xuống và cài đặt bất kỳ gói và gói Python Runtimes tùy chỉnh nào như mong muốn.

Để xem danh sách các gói Python nào được cài đặt, bao gồm cả phiên bản, hãy chạy tập lệnh sau.

Danh sách này là từ

STDOUT message(s) from external script:
0.5 2
7 trong Python và được trả lại SQL dưới dạng khung dữ liệu.