Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come connettere Python a SQL Server per automatizzare il processo di back-end

L'automazione dei processi di back-end nell'istanza di SQL Server è un'attività comune. Che si tratti di aggiornare le statistiche, ricostruire indici, leggere o eliminare dati, è estremamente prezioso integrare altri framework di programmazione con il tuo RDBMS. Questo articolo considererà questi tipi di attività specificamente integrati con Python.

Non ci concentreremo su domande così fondamentali come cosa sono SQL e Python, o come e dove li usiamo. Esamineremo invece i casi specifici che richiedono la combinazione di SQL e Python e vari moduli di metodi disponibili per farlo.

Stringa di connessione a SQL Server

Prima di iniziare a esplorare il caso della connessione Python al server SQL, prendiamo familiarità con le basi.

Una stringa di connessione rappresenta i dati richiesti che puntano e autenticano l'istanza del database. Potrebbero esserci lievi sfumature per ogni tipo di istanza del database, ma in generale le informazioni richieste sarebbero il nome del server, il driver del database, il nome utente, la password e il numero di porta.

Dettagli dell'istanza di SQL Server

I dettagli di questa stringa di connessione saranno gli stessi di quando ci si connette tramite SSMS all'istanza del database. Prendi nota dell'istanza del database {SERVER}\{INSTANCE} formato – eccolo DESKTOP-6L1B155\FogelDev . È anche possibile connettersi a un nome server se hai solo una singola istanza predefinita in esecuzione.

Codice di creazione di database e tabelle di SQL Server

Innanzitutto, abbiamo bisogno di un database con una struttura di tabelle richiesta per funzionare con Python e SQL Server. Lo script seguente creerà un tale database e una singola tabella al suo interno. Quella tabella servirà come area dimostrativa per vedere come utilizzare SQL e Python insieme.

CREATE DATABASE CODESIGHT_DEMOS;
USE CODESIGHT_DEMOS;
CREATE TABLE POSTS
(
ID INT IDENTITY(1,1) PRIMARY KEY,
NAME VARCHAR(200),
Author VARCHAR(100),
URL VARCHAR(100),
DATE DATE
)

INSERT INTO POSTS
VALUES('Properly Dealing with Encryption of Databases in an AlwaysOn Availability Group Scenario','Alejandro Cobar','https://codingsight.com/encryption-of-databases-in-alwayson-availability-group-scenario/','4/23/2021')

INSERT INTO POSTS
VALUES('An Overview of DataFrames in Python','Aveek Das','https://codingsight.com/an-overview-of-dataframes-in-python/','4/23/2021')

INSERT INTO POSTS
VALUES('SQL Server Business Intelligence (BI) – Traditional Tools and Technologies','Haroon Ashraf','https://codingsight.com/sql-server-business-intelligence-bi-tools-and-technologies/','4/19/2021')

Moduli Python

Il nostro obiettivo ora è definire come connettere Python alle istanze del server SQL. Sono disponibili più moduli Python per eseguire questa attività e due di essi sono primari. Ci occuperemo di PYODC e SQLAlchemy . Questi moduli gestiscono la parte di connessione delle operazioni.

È necessario un codice aggiuntivo per leggere i dati dalle tabelle di SQL Server in memoria. È qui che si trovano i Panda la libreria entra.

Panda può essere integrato strettamente con SQLALchemy per leggere i dati direttamente nel DataFrame oggetti (nella memoria basata su array di memoria che può funzionare alla velocità della luce e assomigliare a tabelle di database).

Diamo un'occhiata ad alcuni esempi di stringhe di connessione.

Il primo esempio usa SQL Server e l'istanza dello screenshot precedente. Puoi impostare queste variabili nei tuoi dettagli specifici per creare un'istanza della connessione.

Si noti inoltre che questa particolare connessione utilizza l'autenticazione di Windows. Pertanto, tenterà di autenticarsi come utente dalla mia macchina Windows a cui ho effettuato l'accesso. Se non vengono specificati nome utente e password, questo è il comportamento predefinito nella stringa di connessione.

  • Nome server ='DESKTOP-6L1B155'
  • Nome istanza ='FogelDev'
  • Nome database ='CODESIGHT_DEMOS'
  • Numero di porta ='1433'
print("mssql+pyodbc://@{SERVER}:{PORT}\\{INSTANCE}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber))

MSSQLengine = sqlalchemy.create_engine("mssql+pyodbc://@{SERVER}\\{INSTANCE}:{PORT}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber))

Possiamo verificare se questa connessione funziona correttamente eseguendo una query con Pandas. Deve leggere una query dalla stringa di connessione utilizzando read_sql_query comando.

df = pd.read_sql_query("SELECT * FROM POSTS", MSSQLengine)
df

Autenticazione SQL Server

Cosa succede se è necessario utilizzare la stringa di connessione basata sull'autenticazione del server SQL per connettersi al server SQL? Possiamo modificare il nostro codice Python per aggiungere nome utente e password a SQLALchemy motore.

  • Nome server ='DESKTOP-6L1B155'
  • Nome istanza ='FogelDev'
  • Nome database ='CODESIGHT_DEMOS'
  • Numero porta ='1433'
  • Nome utente ='CodingSightUser'
  • Password ='Password123'
print("mssql+pyodbc://{USER}:{PASS}@{SERVER}:{PORT}\\{INSTANCE}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber,USER = Username, PASS = Password))
MSSQLengine = sqlalchemy.create_engine("mssql+pyodbc://{USER}:{PASS}@{SERVER}\\{INSTANCE}:{PORT}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber,USER = Username, PASS = Password))

Ancora una volta, stiamo testando la nostra connessione, ma questa volta selezioniamo solo 1 record dalla tabella.

df = pd.read_sql_query("SELECT TOP 1 * FROM POSTS", MSSQLengine)
df

Scrittura dei dati

Infine, dai un'occhiata a come ottenere i dati Python nella nostra tabella del database di SQL Server. Creiamo un oggetto Dataframe e lo aggiungiamo alla tabella.

Il metodo Dataframe:

newdata = [{'Name': 'How to Create the Date Table in Power BI', 'Author': 'Haroon Ashraf', 'URL':'https://codingsight.com/how-to-create-date-table-in-power-bi/', 'Date':'4/21/21'}]
load_df = pd.DataFrame(newdata)
load_df.to_sql("POSTS", MSSQLengine, if_exists='append',index = False, chunksize = 200)

Un altro metodo sarebbe inserire i dati direttamente nella tabella con il comando di esecuzione.

Il metodo Esegui:

MSSQLengine.execute("INSERT INTO [POSTS] VALUES('SQL Query Optimization: 5 Core Facts to Boost Queries','Edwin Sanchez','https://codingsight.com/sql-query-optimization-5-core-facts-to-boost-queries/','3/31/21')");

Al termine, il tavolo finale si presenta come segue. Ha le prime 3 righe caricate dallo script di creazione iniziale di SQL Server e le 4 e 5 righe vengono caricate da Python.

Riepilogo

Questo post ha evidenziato i parametri della stringa di connessione per la connessione del codice Python con SQL Server. Abbiamo esaminato la lettura dei dati da SQL Server e verificato due diversi metodi di autenticazione:il caso specifico della connessione Python all'autenticazione di Windows del server SQL e l'autenticazione standard del server SQL. Inoltre, abbiamo esaminato i metodi per caricare i dati, uno dei quali prevede l'utilizzo dell'oggetto DataFrame in Python e un altro è un comando SQL INSERT grezzo.