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

Sådan forbinder du Python til SQL Server for at automatisere backend-processen

Automatisering af backend-processer i din SQL Server-instans er en almindelig opgave. Uanset om det er at opdatere statistikken, genopbygge indekser, læse eller slette data, er det ekstremt værdifuldt at integrere andre programmeringsrammer med dit RDBMS. Denne artikel vil overveje disse typer opgaver specifikt integreret med Python.

Vi vil ikke fokusere på så grundlæggende spørgsmål som, hvad der er SQL og Python, eller hvordan og hvor vi bruger dem. I stedet vil vi undersøge de specifikke tilfælde, der kræver at kombinere SQL og Python, og forskellige tilgængelige metodemoduler til at gøre det.

SQL-serverforbindelsesstreng

Før vi begynder at udforske tilfældet med Python-forbindelse til SQL-server, lad os blive fortrolige med det grundlæggende.

En forbindelsesstreng repræsenterer de nødvendige stykker data, der peger på og godkender din databaseinstans. Der kan være små nuancer for hver databaseinstanstype, men generelt vil de nødvendige oplysninger være servernavnet, databasedriveren, brugernavnet, adgangskoden og portnummeret.

SQL-serverforekomstdetaljer

Detaljerne for denne forbindelsesstreng vil være de samme, som når du opretter forbindelse via SSMS til databaseinstansen. Bemærk databaseforekomsten {SERVER}\{INSTANCE} format – her er det DESKTOP-6L1B155\FogelDev . Det er også muligt at oprette forbindelse til et servernavn, hvis du kun har en enkelt standardinstans, der kører.

SQL-serverdatabase og tabeloprettelseskode

For det første har vi brug for en database med en tabelstruktur, der kræves for at arbejde med Python og SQL Server. Følgende script vil oprette en sådan database og en enkelt tabel i den. Denne tabel vil tjene som demonstrationsområde, hvor vi kan se, hvordan man bruger SQL og Python sammen.

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')

Python-moduler

Vores mål er nu at definere, hvordan man forbinder Python til SQL-serverforekomster. Flere Python-moduler er tilgængelige til at udføre denne opgave, og to af dem er primære. Vi skal beskæftige os med PYODC og SQLAlchemy . Disse moduler håndterer forbindelsesdelen af ​​operationerne.

Der kræves en ekstra kode for at læse dataene fra SQL Server-tabeller ind i hukommelsen. Det er her Pandaerne biblioteket kommer ind.

Pandaer kan integreres tæt med SQLALchemy at læse dataene direkte ind iDataFrame objekter (i memory array-baseret lager, som kan fungere lynhurtigt og ligne databasetabeller).

Lad os tage et kig på et par eksempler på forbindelsesstrenge.

Det første eksempel bruger SQL Server og instans fra det forrige skærmbillede. Du kan indstille disse variabler i dine specifikke detaljer for at instansiere forbindelsen.

Bemærk også, at denne særlige forbindelse bruger Windows-godkendelse. Derfor vil den forsøge at godkende som brugeren fra min Windows-maskine, som jeg er logget på. Hvis der ikke er angivet noget brugernavn og adgangskode, er dette standardadfærden i forbindelsesstrengen.

  • Servernavn ='DESKTOP-6L1B155'
  • Forekomstnavn ='FogelDev'
  • Databasenavn ='CODESIGHT_DEMOS'
  • Portnummer ='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))

Vi kan teste, om denne forbindelse fungerer korrekt ved at udføre en forespørgsel med Pandas. Den skal læse en forespørgsel fra forbindelsesstrengen ved hjælp af read_sql_query kommando.

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

SQL-servergodkendelse

Hvad hvis du skal bruge den SQL-servergodkendelsesbaserede forbindelsesstreng til at oprette forbindelse til din SQL Server? Vi kan justere vores Python-kode for at tilføje brugernavn og adgangskode til SQLALchemy motor.

  • Servernavn ='DESKTOP-6L1B155'
  • Forekomstnavn ='FogelDev'
  • Databasenavn ='CODESIGHT_DEMOS'
  • Portnummer ='1433'
  • Brugernavn ='CodingSightUser'
  • Adgangskode ='Adgangskode123'
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))

Igen tester vi vores forbindelse, men denne gang vælger vi kun 1 post fra tabellen.

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

Skrivning af data

Tag endelig et kig på at få Python-dataene ind i vores SQL Server-databasetabel. Vi opretter et Dataframe-objekt og tilføjer det til tabellen.

Dataframe-metoden:

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)

En anden metode ville være at indsætte dataene direkte i tabellen med kommandoen execute.

Udfør metoden:

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')");

Når det er færdigt, ser finalebordet ud som følger. Den har de første 3 rækker indlæst af det indledende SQL Server-oprettelsesscript, og de 4 og 5 rækker indlæses af Python.

Oversigt

Dette indlæg fremhævede forbindelsesstrengparametrene for at forbinde Python-koden med SQL Server. Vi undersøgte at læse dataene ud af SQL Serveren og kontrollerede to forskellige godkendelsesmetoder - det specifikke tilfælde af Python-forbindelse til SQL-server Windows-godkendelse og standard SQL-servergodkendelse. Vi har også gennemgået metoderne til at indlæse data, hvoraf en involverer brug af objekt DataFrame i Python, og en anden er en rå SQL INSERT-kommando.


  1. Sådan benchmarker du Moodles ydeevne

  2. Pas på vildledende data fra SET STATISTICS IO

  3. Ormlite eller sqlite Hvilken er god til Android-perspektiv?

  4. Sådan bestiller du efter dato i MySQL