Sdílet prostřednictvím


Připojení zpětné smyčky k SQL Serveru ze skriptu Pythonu nebo R

Platí na: SQL Server 2019 (15.x) a novější verze Azure SQL Managed Instance

Zjistěte, jak pomocí loopback spojení s Machine Learning Services se připojit zpět k SQL Serveru přes ODBC pro čtení nebo zápis dat ze skriptu v Pythonu nebo R, který je spuštěný přes sp_execute_external_script. Možnost můžete použít, když není možné použít argumenty InputDataSet a OutputDataSet.

Připojovací řetězec

Pokud chcete vytvořit připojení zpětné smyčky, musíte použít správný připojovací řetězec. Mezi běžné povinné argumenty patří název ovladače ODBC, adresa serveru a název databáze.

Připojovací řetězec ve Windows

Pro ověřování na SQL Serveru ve Windows může skript Pythonu nebo R použít atribut připojovacího řetězce Trusted_Connection k ověření jako stejný uživatel, který spustil sp_execute_external_script.

Tady je příklad připojovacího řetězce zpětné smyčky ve Windows:

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

Připojovací řetězec v Linuxu

Pro ověřování na SQL Serveru v Linuxu musí skript Pythonu nebo R použít atributy ClientCertificate a ClientKey ovladače ODBC k ověření jako stejný uživatel, který spustil sp_execute_external_script. To vyžaduje použití nejnovějšího ovladače ODBC verze 17.4.1.1.

Tady je příklad připojovacího řetězce loopback v Linuxu:

"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"

Adresa serveru, umístění souboru certifikátu klienta a umístění souboru klíče klienta jsou jedinečné pro každou sp_execute_external_script adresu a lze ji získat pomocí rozhraní API rx_get_sql_loopback_connection_string() pro Python nebo rxGetSqlLoopbackConnectionString() pro R.

Další informace o atributech připojovacího řetězce naleznete v DSN a klíčová slova a atributy připojovacích řetězců pro Microsoft ODBC Driver pro SQL Server.

Připojovací řetězec ve službě Azure SQL Managed Instance

Pokud chcete vygenerovat připojovací řetězec pro azure SQL Managed Instance, podívejte se na příklady v dalších částech. Použijte ovladač ODBC 11 pro SQL Server jako ovladač ODBC pro zpětná připojení.

Generování připojovacího řetězce pomocí revoscalepy pro Python

Pomocí rozhraní API rx_get_sql_loopback_connection_string() v revoscalepy můžete vygenerovat správný připojovací řetězec pro připojení zpětné smyčky ve skriptu Pythonu.

Přijímá následující argumenty:

Argument Description
název_databáze Název databáze, ke které má být připojení provedeno
odbc_driver Název ovladače odbc

Examples

Příklad pro SQL Server ve 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

Příklad pro SQL Server na Linuxu:

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

Příklad pro spravovanou instanci Azure SQL:

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 11 for 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

Generování připojovacího řetězce pomocí RevoScaleR pro R

Pomocí rozhraní API rxGetSqlLoopbackConnectionString() v RevoScaleR můžete vygenerovat správný připojovací řetězec pro připojení zpětné smyčky ve skriptu R.

Přijímá následující argumenty:

Argument Description
nameOfDatabase Název databáze, ke které má být připojení provedeno
odbcDriver Název ovladače odbc

Examples

Příklad pro SQL Server ve 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

Příklad pro SQL Server na Linuxu:

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

Příklad pro spravovanou instanci Azure SQL:

EXECUTE sp_execute_external_script
@language = N'R',
@script = N'
    loopbackConnectionString <- rxGetSqlLoopbackConnectionString(nameOfDatabase="DBName", odbcDriver ="ODBC Driver 11 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

Další kroky