Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
              Gäller för: SQL Server 2017 (14.x) och senare versioner 
Azure SQL Managed Instance
I den här snabbstarten kör du en uppsättning enkla Python-skript med SQL Server Machine Learning Services, Azure SQL Managed Instance Machine Learning Services eller SQL Server Big Data Clusters. Du får lära dig hur du använder den lagrade proceduren sp_execute_external_script för att köra skriptet i en SQL Server-instans.
Förutsättningar
Du behöver följande förutsättningar för att köra den här snabbstarten.
En SQL-databas på någon av dessa plattformar:
- SQL Server Machine Learning Services. Information om hur du installerar finns i installationsguiden för Windows eller installationsguiden för Linux.
 - SQL Server 2019 Big Data Clusters. Se hur du aktiverar Machine Learning Services på SQL Server 2019 Big Data Clusters.
 - Azure SQL Managed Instance Machine Learning Services. Mer information finns i Översikt över Azure SQL Managed Instance Machine Learning Services.
 
Ett verktyg för att köra SQL-frågor som innehåller Python-skript. Den här snabbstarten använder Azure Data Studio.
Köra ett enkelt skript
Om du vill köra ett Python-skript skickar du det som ett argument till den system lagrade proceduren sp_execute_external_script. Den här system lagrade proceduren startar Python-körningen i samband med SQL-maskininlärning, skickar data till Python, hanterar Python-användarsessioner på ett säkert sätt och returnerar eventuella resultat till klienten.
I följande steg kör du det här Python-exempelskriptet i databasen:
a = 1
b = 2
c = a/b
d = a*b
print(c, d)
Öppna ett nytt frågefönster i Azure Data Studio som är anslutet till din SQL-instans.
Skicka det fullständiga Python-skriptet till den
sp_execute_external_scriptlagrade proceduren.Skriptet skickas via
@scriptargumentet. Allt i@scriptargumentet måste vara giltig Python-kod.EXECUTE sp_execute_external_script @language = N'Python' , @script = N' a = 1 b = 2 c = a/b d = a*b print(c, d) 'Rätt resultat beräknas och Python-funktionen
printreturnerar resultatet till fönstret Meddelanden .Det borde se ut ungefär så här.
Results
STDOUT message(s) from external script: 0.5 2
Köra ett Hello World-skript
Ett typiskt exempelskript är ett skript som bara matar ut strängen "Hello World". Kör följande kommando.
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
Indata till den sp_execute_external_script lagrade proceduren omfattar:
| Indata | Description | 
|---|---|
| @language | definierar språktillägget som ska anropas, i det här fallet Python | 
| @script | definierar de kommandon som skickas till Python-körmiljön. Hela Python-skriptet måste omges av det här argumentet som Unicode-text. Du kan också lägga till texten i en variabel av typen nvarchar och sedan anropa variabeln | 
| @input_data_1 | data som returneras av frågan, skickas till Python-körningen, som returnerar data som en dataram | 
| MED RESULTATUPPSÄTTNINGAR | -satsen definierar schemat för den returnerade datatabellen för SQL-maskininlärning och lägger till "Hello World" som kolumnnamn, int för datatypen | 
Kommandot matar ut följande text:
| Hello World | 
|---|
| 1 | 
Använda indata och utdata
Som standard sp_execute_external_script accepterar en enskild datauppsättning som indata, som du vanligtvis anger i form av en giltig SQL-fråga. Den returnerar sedan en enda Python-dataram som utdata.
Nu ska vi använda standardvariablerna sp_execute_external_scriptför in- och utdata i : InputDataSet och OutputDataSet.
Skapa en liten tabell med testdata.
CREATE TABLE PythonTestData (col1 INT NOT NULL) INSERT INTO PythonTestData VALUES (1); INSERT INTO PythonTestData VALUES (10); INSERT INTO PythonTestData VALUES (100); GOAnvänd -instruktionen
SELECTför att fråga tabellen.SELECT * FROM PythonTestDataResults
              
            Kör följande Python-skript. Den hämtar data från tabellen med hjälp av -instruktionen
SELECT, skickar dem genom Python-körningen och returnerar data som en dataram. SatsenWITH RESULT SETSdefinierar schemat för den returnerade datatabellen för SQL och lägger till kolumnnamnet 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));Results
              
            Ändra nu namnen på indata- och utdatavariablerna. Standardnamnen för indata och utdatavariabler är InputDataSet och OutputDataSet. Följande skript ändrar namnen till SQL_in och 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));Observera att Python är skiftlägeskänsligt. De in- och utdatavariabler som används i Python-skriptet (SQL_out, SQL_in) måste matcha namnen som definierats med
@input_data_1_nameoch@output_data_1_name, inklusive skiftläge.Tips/Råd
Endast en indatauppsättning kan skickas som en parameter och du kan bara returnera en datauppsättning. Du kan dock anropa andra datauppsättningar inifrån Python-koden och du kan returnera utdata av andra typer utöver datauppsättningen. Du kan också lägga till nyckelordet OUTPUT i valfri parameter så att det returneras med resultatet.
Du kan också generera värden bara med hjälp av Python-skriptet utan indata (
@input_data_1är inställt på tom).Följande skript matar ut texten "hello" och "world".
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));Results
 som indataSökfrågeresultat med 
Tips/Råd
Python använder inledande blanksteg för att gruppera uttalanden. Så när det imbedded Python-skriptet sträcker sig över flera rader, som i föregående skript, försök inte att dra in Python-kommandona så att de är i linje med SQL-kommandona. Det här skriptet skapar till exempel ett fel:
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));
Kontrollera Python-versionen
Om du vill se vilken version av Python som är installerad på servern kör du följande skript.
EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
import sys
print(sys.version)
'
GO
Python-funktionen print returnerar versionen till fönstret Meddelanden . I exemplet nedan kan du se att Python version 3.5.2 i det här fallet är installerat.
Results
STDOUT message(s) from external script:
3.5.2 |Continuum Analytics, Inc.| (default, Jul  5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)]
Lista Python-paket
Microsoft tillhandahåller ett antal Python-paket förinstallerade med Machine Learning Services i SQL Server 2016 (13.x), SQL Server 2017 (14.x) och SQL Server 2019 (15.x). I SQL Server 2022 (16.x) kan du ladda ned och installera anpassade Python-körningar och -paket efter behov.
Om du vill se en lista över vilka Python-paket som är installerade, inklusive version, kör du följande skript.
EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
import pkg_resources
import pandas
dists = [str(d) for d in pkg_resources.working_set]
OutputDataSet = pandas.DataFrame(dists)
'
WITH RESULT SETS(([Package] NVARCHAR(max)))
GO
Listan är från pkg_resources.working_set i Python och returneras till SQL som en dataram.
Nästa steg
Följ den här snabbstarten om du vill lära dig hur du använder datastrukturer när du använder Python i SQL-maskininlärning: