sql >> Database >  >> RDS >> Sqlserver

Hoe Python met SQL Server te verbinden om het backend-proces te automatiseren

Het automatiseren van backend-processen in uw SQL Server-instantie is een veelvoorkomende taak. Of het nu gaat om het vernieuwen van de statistieken, het opnieuw opbouwen van indexen, het lezen of verwijderen van gegevens, het is uiterst waardevol om andere programmeerframeworks met uw RDBMS te integreren. In dit artikel wordt gekeken naar dit soort taken dat specifiek is geïntegreerd met Python.

We zullen ons niet concentreren op fundamentele vragen als wat is SQL en Python, of hoe en waar we ze gebruiken. In plaats daarvan gaan we de specifieke gevallen onderzoeken die het combineren van SQL en Python vereisen, en verschillende methodemodules die hiervoor beschikbaar zijn.

SQL Server-verbindingsreeks

Voordat we beginnen met het onderzoeken van het geval van Python-verbinding met SQL-server, laten we ons vertrouwd maken met de basis.

Een verbindingsreeks vertegenwoordigt de vereiste gegevens die verwijzen naar uw database-instantie en deze verifiëren. Er kunnen kleine nuances zijn voor elk type database-instantie, maar over het algemeen is de vereiste informatie de servernaam, het databasestuurprogramma, de gebruikersnaam, het wachtwoord en het poortnummer.

SQL Server-instantiedetails

De details van deze verbindingsreeks zijn hetzelfde als wanneer u via SSMS verbinding maakt met de database-instantie. Let op de database-instantie {SERVER}\{INSTANCE} formaat – hier is het DESKTOP-6L1B155\FogelDev . Het is ook mogelijk om verbinding te maken met een servernaam als er slechts één standaardinstantie actief is.

SQL Server Database en Table reation Сode

Ten eerste hebben we een database nodig met een tabelstructuur die nodig is om met Python en SQL Server te werken. Het volgende script maakt zo'n database en een enkele tabel erin. Die tabel zal voor ons dienen als demonstratiegebied om te zien hoe SQL en Python samen kunnen worden gebruikt.

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

Ons doel is nu om te definiëren hoe Python te verbinden met SQL-serverinstanties. Er zijn meerdere Python-modules beschikbaar om deze taak uit te voeren, en twee daarvan zijn primair. We gaan afrekenen met PYODC en SQLAalchemie . Deze modules behandelen het verbindingsgedeelte van de operaties.

Er is een extra code nodig om de gegevens uit SQL Server-tabellen in het geheugen te lezen. Dit is waar de Panda's bibliotheek komt binnen.

Panda's kan nauw worden geïntegreerd met SQLALchemy om de gegevens rechtstreeks in het DataFrame te lezen objecten (in geheugenarray-gebaseerde opslag die razendsnel kan werken en er net zo uitziet als databasetabellen).

Laten we een paar voorbeelden van verbindingsreeksen bekijken.

Het eerste voorbeeld gebruikt de SQL Server en het exemplaar uit de vorige schermafbeelding. U kunt deze variabelen in uw specifieke details instellen om verbinding te maken.

Merk ook op dat deze specifieke verbinding Windows-verificatie gebruikt. Daarom zal het proberen te authenticeren als de gebruiker vanaf mijn Windows-computer waarop ik ben ingelogd. Als er geen gebruikersnaam en wachtwoord zijn opgegeven, is dit het standaardgedrag in de verbindingsreeks.

  • Servernaam ='DESKTOP-6L1B155'
  • Instantienaam ='FogelDev'
  • Databasenaam ='CODESIGHT_DEMOS'
  • Poortnummer ='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))

We kunnen testen of deze verbinding correct werkt door een query uit te voeren met Pandas. Het moet een query uit de verbindingsreeks lezen met behulp van de read_sql_query commando.

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

SQL Server-verificatie

Wat als u de verbindingsreeks op basis van SQL-serververificatie moet gebruiken om verbinding te maken met uw SQL Server? We kunnen onze Python-code aanpassen om gebruikersnaam en wachtwoord toe te voegen aan de SQLALchemy motor.

  • Servernaam ='DESKTOP-6L1B155'
  • Instancename ='FogelDev'
  • Databasenaam ='CODESIGHT_DEMOS'
  • Poortnummer ='1433'
  • Gebruikersnaam ='CodingSightUser'
  • Wachtwoord ='Wachtwoord123'
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))

Nogmaals, we testen onze verbinding, maar deze keer selecteren we slechts 1 record uit de tabel.

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

Gegevens schrijven

Bekijk ten slotte hoe u de Python-gegevens in onze SQL Server-databasetabel krijgt. We maken een Dataframe-object en voegen het toe aan de tabel.

De Dataframe-methode:

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)

Een andere methode zou zijn om de gegevens rechtstreeks in de tabel in te voegen met de opdracht execute.

De Execute-methode:

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

Als je klaar bent, ziet de finaletafel er als volgt uit. Het heeft de eerste 3 rijen die worden geladen door het initiële script voor het maken van SQL Server en de 4 en 5 rijen worden geladen door Python.

Samenvatting

Dit bericht benadrukte de verbindingsreeksparameters voor het verbinden van de Python-code met SQL Server. We onderzochten het uitlezen van de gegevens uit de SQL Server en controleerden twee verschillende authenticatiemethoden:het specifieke geval van Python connect met SQL server Windows-authenticatie en de standaard SQL-serverauthenticatie. We hebben ook de methoden voor het laden van gegevens bekeken, waaronder het gebruik van object DataFrame in Python, en een andere is een onbewerkte SQL INSERT-opdracht.


  1. Exporteer het resultaat van de opgeslagen procedure naar Excel in SSMS

  2. Kan ik Postgresql vragen fouten binnen een transactie te negeren?

  3. Database-automatisering met Puppet:MySQL- en MariaDB-replicatie implementeren

  4. SQL Server verbinden met PostgreSQL