Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So verbinden Sie Python mit SQL Server, um den Backend-Prozess zu automatisieren

Die Automatisierung von Back-End-Prozessen in Ihrer SQL Server-Instanz ist eine häufige Aufgabe. Ob es darum geht, die Statistiken zu aktualisieren, Indizes neu zu erstellen, Daten zu lesen oder zu löschen, es ist äußerst wertvoll, andere Programmier-Frameworks in Ihr RDBMS zu integrieren. In diesem Artikel werden diese Arten von Aufgaben betrachtet, die speziell in Python integriert sind.

Wir werden uns nicht auf so grundlegende Fragen konzentrieren, wie zum Beispiel, was SQL und Python sind oder wie und wo wir sie verwenden. Stattdessen werden wir die spezifischen Fälle untersuchen, die eine Kombination von SQL und Python erfordern, sowie verschiedene Methodenmodule, die dafür verfügbar sind.

SQL Server-Verbindungszeichenfolge

Bevor wir den Fall der Verbindung von Python mit dem SQL-Server untersuchen, sollten wir uns mit den Grundlagen vertraut machen.

Eine Verbindungszeichenfolge stellt die erforderlichen Datenelemente dar, die auf Ihre Datenbankinstanz verweisen und diese authentifizieren. Für jeden Datenbankinstanztyp kann es leichte Nuancen geben, aber im Allgemeinen wären die erforderlichen Informationen der Servername, der Datenbanktreiber, der Benutzername, das Kennwort und die Portnummer.

SQL Server-Instanzdetails

Die Details dieser Verbindungszeichenfolge sind dieselben wie bei einer Verbindung über SSMS mit der Datenbankinstanz. Notieren Sie sich die Datenbankinstanz {SERVER}\{INSTANCE} Format – hier ist es DESKTOP-6L1B155\FogelDev . Es ist auch möglich, eine Verbindung zu einem Servernamen herzustellen, wenn Sie nur eine einzelne Standardinstanz ausführen.

SQL Server-Datenbank und Tabellenerstellungscode

Zunächst benötigen wir eine Datenbank mit einer Tabellenstruktur, die für die Arbeit mit Python und SQL Server erforderlich ist. Das folgende Skript erstellt eine solche Datenbank und eine einzelne Tabelle darin. Diese Tabelle dient als Demonstrationsbereich für uns, um zu sehen, wie man SQL und Python zusammen verwendet.

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

Unser Ziel ist es nun, zu definieren, wie Python mit SQL-Serverinstanzen verbunden werden kann. Für diese Aufgabe stehen mehrere Python-Module zur Verfügung, von denen zwei primär sind. Wir werden uns mit PYODC befassen und SQLAlchemy . Diese Module handhaben den Verbindungsteil der Operationen.

Ein zusätzlicher Code ist erforderlich, um die Daten aus SQL Server-Tabellen in den Arbeitsspeicher zu lesen. Hier leben die Pandas Bibliothek kommt herein.

Pandas kann eng mit SQLALchemy integriert werden um die Daten direkt in denDataFrame einzulesen Objekte (in Speicher-Array-basierter Speicherung, die blitzschnell arbeiten und genau wie Datenbanktabellen aussehen können).

Sehen wir uns einige Beispiele für Verbindungszeichenfolgen an.

Das erste Beispiel verwendet den SQL Server und die Instanz aus dem vorherigen Screenshot. Sie können diese Variablen in Ihren spezifischen Details festlegen, um die Verbindung zu instanziieren.

Beachten Sie auch, dass diese spezielle Verbindung die Windows-Authentifizierung verwendet. Daher wird versucht, sich als der Benutzer meines Windows-Rechners zu authentifizieren, an dem ich angemeldet bin. Wenn kein Benutzername und Passwort angegeben sind, ist dies das Standardverhalten in der Verbindungszeichenfolge.

  • Servername =„DESKTOP-6L1B155“
  • Instanzname =„FogelDev“
  • Datenbankname =„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))

Wir können testen, ob diese Verbindung korrekt funktioniert, indem wir eine Abfrage mit Pandas ausführen. Es muss mithilfe von read_sql_query eine Abfrage aus der Verbindungszeichenfolge lesen Befehl.

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

SQL Server-Authentifizierung

Was ist, wenn Sie die auf der SQL Server-Authentifizierung basierende Verbindungszeichenfolge verwenden müssen, um eine Verbindung zu Ihrem SQL Server herzustellen? Wir können unseren Python-Code anpassen, um Benutzername und Passwort zu SQLALchemy hinzuzufügen Motor.

  • Servername =„DESKTOP-6L1B155“
  • Instanzname =‚FogelDev‘
  • Datenbankname =„CODESIGHT_DEMOS“
  • Portnummer =„1433“
  • Benutzername =„CodingSightUser“
  • Passwort =‚Passwort123‘
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))

Wieder testen wir unsere Verbindung, aber dieses Mal wählen wir nur 1 Datensatz aus der Tabelle aus.

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

Daten schreiben

Werfen Sie abschließend einen Blick darauf, wie Sie die Python-Daten in unsere SQL Server-Datenbanktabelle übertragen. Wir erstellen ein Dataframe-Objekt und hängen es an die Tabelle an.

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

Eine andere Methode wäre das direkte Einfügen der Daten in die Tabelle mit dem Befehl execute.

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

Wenn Sie fertig sind, sieht die Abschlusstabelle wie folgt aus. Die ersten 3 Zeilen werden vom anfänglichen SQL Server-Erstellungsskript geladen, und die 4 und 5 Zeilen werden von Python geladen.

Zusammenfassung

In diesem Beitrag wurden die Parameter der Verbindungszeichenfolge zum Verbinden des Python-Codes mit SQL Server hervorgehoben. Wir haben das Auslesen der Daten aus dem SQL Server untersucht und zwei verschiedene Authentifizierungsmethoden geprüft – den speziellen Fall der Python-Verbindung zur Windows-Authentifizierung des SQL-Servers und die Standard-SQL-Server-Authentifizierung. Außerdem haben wir die Methoden zum Laden von Daten überprüft, von denen eine die Verwendung des Objekts DataFrame in Python und eine andere ein reiner SQL-INSERT-Befehl ist.