Loopbackverbindung zu SQL Server über ein Python- oder R-SkriptLoopback connection to SQL Server from a Python or R script

Anwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) Anwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions)

Hier erfahren Sie, wie Sie mit einer Loopbackverbindung über ODBC eine Verbindung zurück zu SQL Server herstellen können, um Daten in einem über sp_execute_external_script ausgeführten Python- oder R-Skript lesen oder schreiben können.Learn how to use a loopback connection to connect back to SQL Server over ODBC to read or write data from a Python or R script executed from sp_execute_external_script. Sie können diese Methode verwenden, wenn nicht die Möglichkeit besteht, die Argumente InputDataSet und OutputDataSet von sp_execute_external_script zu verwenden.You can use this when using the InputDataSet and OutputDataSet arguments of sp_execute_external_script are not possible.

VerbindungszeichenfolgeConnection string

Wenn Sie eine Loopbackverbindung herstellen möchten, müssen Sie eine entsprechende Verbindungszeichenfolge verwenden.To make a loopback connection, you need to use a correct connection string. Der Name des ODBC-Treibers, die Serveradresse und der Name der Datenbank sind in der Regel obligatorische Argumente.The common mandatory arguments are the name of the ODBC driver, the server address, and the name of database.

Verbindungszeichenfolge unter WindowsConnection string on Windows

Bei SQL Server unter Windows kann im Python- oder R-Skript das Verbindungszeichenfolgenattribut Trusted_Connection zur Authentifizierung als der Benutzer, der „sp_execute_external_script“ ausgeführt hat, verwendet werden.For authentication on SQL Server on Windows, the Python or R script can use the Trusted_Connection connection string attribute to authenticate as the same user that ran the sp_execute_external_script.

Im Folgenden finden Sie ein Beispiel für die Zeichenfolge einer Loopbackverbindung unter Windows:Here is an example of the loopback connection string on Windows:

"Driver=SQL Server;Server=.;Database=nameOfDatabase;Trusted_Connection=Yes;"

Verbindungszeichenfolge unter LinuxConnection string on Linux

Bei SQL Server unter Linux müssen im Python- bzw. R-Skript die Attribute ClientCertificate und ClientKey des ODBC-Treibers zur Authentifizierung als der Benutzer, der sp_execute_external_script ausgeführt hat, verwendet werden.For authentication on SQL Server on Linux, the Python or R script needs to use ClientCertificate and ClientKey attributes of the ODBC driver to authenticate as the same user that executed sp_execute_external_script. Hierfür ist die Verwendung der aktuellen ODBC-Treiberversion 17.4.1.1 erforderlich.This requires the use of latest ODBC driver version 17.4.1.1.

Im Folgenden finden Sie ein Beispiel für die Zeichenfolge einer Loopbackverbindung unter Linux:Here is an example of the loopback connection string on Linux:

"Driver=ODBC Driver 17 for SQL Server;Server=fe80::8012:3df5:0:5db1%eth0;Database=nameOfDatabase;ClientCertificate=file:/var/opt/mssql-extensibility/data/baeaac72-60b3-4fae-acfd-c50eff5d34a2/sqlsatellitecert.pem;ClientKey=file:/var/opt/mssql-extensibility/data/baeaac72-60b3-4fae-acfd-c50eff5d34a2/sqlsatellitekey.pem;TrustServerCertificate=Yes;Trusted_Connection=no;Encrypt=Yes"

Serveradresse, Speicherort der Clientzertifikatdatei und Speicherort der Clientschlüsseldatei sind für jedes sp_execute_external_script spezifisch und können mithilfe der API rx_get_sql_loopback_connection_string() für Python bzw. rxGetSqlLoopbackConnectionString() für R abgerufen werden.The server address, client certificate file location, and client key file location are unique to every sp_execute_external_script and can be obtained by the use of the API rx_get_sql_loopback_connection_string() for Python or rxGetSqlLoopbackConnectionString() for R.

Weitere Informationen zu den Verbindungszeichenfolgenattributen finden Sie unter Schlüsselwörter und Attribute von DNS- und Verbindungszeichenfolgen für Microsoft ODBC Driver for SQL Server.For more information on the connection string attributes, see the DSN and Connection String Keywords and Attributes for Microsoft ODBC Driver for SQL Server.

Generieren einer Verbindungszeichenfolge mit revoscalepy für PythonGenerate connection string with revoscalepy for Python

Sie können die API rx_get_sql_loopback_connection_string() in revoscalepy verwenden, um eine entsprechende Verbindungszeichenfolge für eine Loopbackverbindung in einem Python-Skript zu generieren.You can use the API rx_get_sql_loopback_connection_string() in revoscalepy to generate a correct connection string for a loopback connection in a Python script.

Dabei werden die folgenden Argumente akzeptiert:It accepts the following arguments:

ArgumentArgument BESCHREIBUNGDescription
name_of_databasename_of_database Name der Datenbank, mit der die Verbindung hergestellt wirdName of the database to which the connection is to be made
odbc_driverodbc_driver Name des ODBC-TreibersName of the odbc driver

BeispieleExamples

Beispiel für SQL Server unter Windows:Example for SQL Server on Windows:

EXECUTE sp_execute_external_script
@language = N'Python',
@script = N'
from revoscalepy import rx_get_sql_loopback_connection_string, RxSqlServerData, rx_data_step
loopback_connection_string = rx_get_sql_loopback_connection_string(odbc_driver="SQL Server", name_of_database="DBName")
print("Connection String:{0}".format(loopback_connection_string))
data_set = RxSqlServerData(sql_query = "select col1, col2 from tableName",
                           connection_string = loopback_connection_string)
OutputDataSet = rx_data_step(data_set)
'
WITH RESULT SETS ((col1 int, col2 int))
GO

Beispiel für SQL Server unter Linux:Example for SQL Server on Linux:

EXECUTE sp_execute_external_script
@language = N'Python',
@script = N'
from revoscalepy import rx_get_sql_loopback_connection_string, RxSqlServerData, rx_data_step
loopback_connection_string = rx_get_sql_loopback_connection_string(odbc_driver="ODBC Driver 17 for SQL Server",
                                                                   name_of_database="DBName")
print("Loopback Connection String:{0}".format(loopback_connection_string))
data_set = RxSqlServerData(sql_query = "select col1, col2 from tableName",
                           connection_string = loopback_connection_string)
OutputDataSet = rx_data_step(data_set)
'
WITH RESULT SETS ((col1 int, col2 int))
GO

Generieren einer Verbindungszeichenfolge mit RevoScaleR für RGenerate connection string with RevoScaleR for R

Sie können die API rxGetSqlLoopbackConnectionString() in RevoScaleR verwenden, um eine entsprechende Verbindungszeichenfolge für eine Loopbackverbindung in einem R-Skript zu generieren.You can use the API rxGetSqlLoopbackConnectionString() in RevoScaleR to generate a correct connection string for a loopback connection in an R script.

Dabei werden die folgenden Argumente akzeptiert:It accepts the following arguments:

ArgumentArgument BESCHREIBUNGDescription
nameOfDatabasenameOfDatabase Name der Datenbank, mit der die Verbindung hergestellt wirdName of the database to which the connection is to be made
odbcDriverodbcDriver Name des ODBC-TreibersName of the odbc driver

BeispieleExamples

Beispiel für SQL Server unter Windows:Example for SQL Server on Windows:

EXECUTE sp_execute_external_script
@language = N'R',
@script = N'
    loopbackConnectionString <- rxGetSqlLoopbackConnectionString(nameOfDatabase="DBName", odbcDriver ="SQL Server")
    print(paste("Connection String:", loopbackConnectionString))
    dataSet <- RxSqlServerData(sqlQuery = "select col1, col2 from tableName",
                               connectionString = loopbackConnectionString)
    OutputDataSet <- rxDataStep(dataSet)
'
WITH RESULT SETS ((col1 int, col2 int))
GO

Beispiel für SQL Server unter Linux:Example for SQL Server on Linux:

EXECUTE sp_execute_external_script
@language = N'R',
@script = N'
    loopbackConnectionString <-  rxGetSqlLoopbackConnectionString(nameOfDatabase="DBName", 
                                                                  odbcDriver ="ODBC Driver 17 for SQL Server")
    print(paste("Connection String:", loopbackConnectionString))
    dataSet <- RxSqlServerData(sqlQuery = "select col1, col2 from tableName", 
                               connectionString = loopbackConnectionString)
    OutputDataSet <- rxDataStep(dataSet)
'
WITH RESULT SETS ((col1 int, col2 int))
GO

Nächste SchritteNext steps