Att automatisera backend-processer i din SQL Server-instans är en vanlig uppgift. Oavsett om det är att uppdatera statistiken, bygga om index, läsa eller radera data, är det extremt värdefullt att integrera andra programmeringsramverk med ditt RDBMS. Den här artikeln kommer att överväga dessa typer av uppgifter specifikt integrerade med Python.
Vi kommer inte att fokusera på så grundläggande frågor som vad som är SQL och Python, eller hur och var vi använder dem. Istället kommer vi att undersöka de specifika fall som kräver att SQL och Python kombineras, och olika metodmoduler som är tillgängliga för att göra det.
SQL Server Connection String
Innan vi börjar utforska fallet med Python-anslutning till SQL-server, låt oss bekanta oss med grunderna.
En anslutningssträng representerar de nödvändiga databitarna som pekar på och autentiserar din databasinstans. Det kan finnas små nyanser för varje databasinstanstyp, men i allmänhet skulle den nödvändiga informationen vara servernamn, databasdrivrutin, användarnamn, lösenord och portnummer.
SQL-serverinstansdetaljer
Detaljerna för denna anslutningssträng kommer att vara desamma som när du ansluter via SSMS till databasinstansen. Notera databasinstansen {SERVER}\{INSTANCE} format – här är det DESKTOP-6L1B155\FogelDev . Det är också möjligt att ansluta till ett servernamn om du bara har en enda standardinstans som körs.
SQL-serverdatabas och tabellskapandekod
Först behöver vi en databas med en tabellstruktur som krävs för att arbeta med Python och SQL Server. Följande skript kommer att skapa en sådan databas och en enda tabell i den. Den tabellen kommer att fungera som demonstrationsområdet för oss att se hur man använder SQL och Python tillsammans.
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
Vårt mål är nu att definiera hur Python ansluts till SQL-serverinstanser. Flera Python-moduler är tillgängliga för att utföra denna uppgift, och två av dem är primära. Vi kommer att ta itu med PYODC och SQLAlchemy . Dessa moduler hanterar anslutningsdelen av operationerna.
En extra kod krävs för att läsa data från SQL Server-tabeller till minnet. Det är här Pandas biblioteket kommer in.
Pandas kan integreras nära med SQLALchemy för att läsa data direkt in iDataFrame objekt (i minnesuppsättningsbaserad lagring som kan fungera blixtsnabbt och se ut precis som databastabeller).
Låt oss ta en titt på några exempel på anslutningssträngar.
Det första exemplet använder SQL Server och instans från föregående skärmdump. Du kan ställa in dessa variabler i dina specifika detaljer för att instansiera anslutningen.
Observera också att den här anslutningen använder Windows-autentisering. Därför kommer den att försöka autentisera som användaren från min Windows-dator som jag är inloggad på. Om inget användarnamn och lösenord anges är detta standardbeteendet i anslutningssträngen.
- Servernamn ='DESKTOP-6L1B155'
- Instansnamn ='FogelDev'
- Databasnamn ='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 testa om den här anslutningen fungerar korrekt genom att köra en fråga med Pandas. Den måste läsa en fråga från anslutningssträngen med read_sql_query kommando.
df = pd.read_sql_query("SELECT * FROM POSTS", MSSQLengine)
df
SQL-serverautentisering
Vad händer om du behöver använda den SQL-serverautentiseringsbaserade anslutningssträngen för att ansluta till din SQL Server? Vi kan justera vår Python-kod för att lägga till användarnamn och lösenord till SQLALchemy motor.
- Servernamn ='DESKTOP-6L1B155'
- Instansnamn ='FogelDev'
- Databasnamn ='CODESIGHT_DEMOS'
- Portnummer ='1433'
- Användarnamn ='CodingSightUser'
- Lösenord ='Lösenord123'
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))
Återigen testar vi vår anslutning, men den här gången väljer vi bara en post från tabellen.
df = pd.read_sql_query("SELECT TOP 1 * FROM POSTS", MSSQLengine)
df
Skriva data
Slutligen, ta en titt på att få Python-data till vår SQL Server-databastabell. Vi skapar ett Dataframe-objekt och lägger till det i 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 annan metod skulle vara att infoga data direkt i tabellen med kommandot execute.
Körmetoden:
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 är klart ser finalbordet ut som följer. Den har de tre första raderna inlästa av det ursprungliga skriptet för att skapa SQL Server, och de fyra och fem raderna laddas av Python.
Sammanfattning
Det här inlägget lyfte fram parametrarna för anslutningssträngen för att ansluta Python-koden med SQL Server. Vi undersökte att läsa data från SQL Server och kontrollerade två olika autentiseringsmetoder – det specifika fallet med Python-anslutning till SQL-server Windows-autentisering och standard SQL-serverautentisering. Vi har också granskat metoderna för att ladda data, varav en involverar användning av objekt DataFrame i Python, och en annan är ett rå SQL INSERT-kommando.