Einfügen eines Python-Datenrahmens in eine SQL-Tabelle

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

In diesem Artikel wird beschrieben, wie ein Pandas-Datenrahmen mithilfe des pyodbc-Pakets in Python in eine SQL-Datenbank-Instanz eingefügt wird.

Voraussetzungen

  • Azure Data Studio. Informationen zur Installation finden Sie unter Herunterladen und Installieren von Azure Data Studio.

  • Befolgen Sie die Schritte unter AdventureWorks-Beispieldatenbanken, um die OLTP-Version der AdventureWorks-Beispieldatenbank für Ihre Version von SQL Server wiederherzustellen.

    Sie können überprüfen, ob die Datenbank ordnungsgemäß wiederhergestellt wurde, indem Sie die Tabelle HumanResources.Department abfragen:

    USE AdventureWorks;
    SELECT * FROM HumanResources.Department;
    

Installieren von Python-Paketen

  1. Öffnen Sie in Azure Data Studio ein neues Notebook, und stellen Sie eine Verbindung mit dem Python 3-Kernel her.

  2. Klicken Sie auf Pakete verwalten.

    Verwalten von Paketen

  3. Klicken Sie dann im Bereich Manage Packages (Pakete verwalten) auf die Registerkarte Add new (Neue hinzufügen).

  4. Geben Sie für jedes der folgenden Pakete den jeweiligen Paketnamen ein, klicken Sie auf Suchen und dann auf Installieren.

    • pyodbc
    • pandas

Herunterladen einer CSV-Beispieldatei

Kopieren Sie den folgenden Text, und speichern Sie ihn in einer Datei mit dem Namen department.csv.

DepartmentID,Name,GroupName,
1,Engineering,Research and Development,
2,Tool Design,Research and Development,
3,Sales,Sales and Marketing,
4,Marketing,Sales and Marketing,
5,Purchasing,Inventory Management,
6,Research and Development,Research and Development,
7,Production,Manufacturing,
8,Production Control,Manufacturing,
9,Human Resources,Executive General and Administration,
10,Finance,Executive General and Administration,
11,Information Services,Executive General and Administration,
12,Document Control,Quality Assurance,
13,Quality Assurance,Quality Assurance,
14,Facilities and Maintenance,Executive General and Administration,
15,Shipping and Receiving,Inventory Management,
16,Executive,Executive General and Administration

Erstellen einer neuen Datenbanktabelle

  1. Befolgen Sie die Schritte unter Herstellen einer Verbindung mit SQL Server, um eine Verbindung mit der AdventureWorks-Datenbank herzustellen.

  2. Erstellen Sie eine Tabelle mit dem Namen HumanResources.DepartmentTest. Die SQL-Tabelle wird für den Einfügevorgang für den Datenrahmen verwendet.

    CREATE TABLE [HumanResources].[DepartmentTest](
    [DepartmentID] [smallint] NOT NULL,
    [Name] [dbo].[Name] NOT NULL,
    [GroupName] [dbo].[Name] NOT NULL
    )
    GO
    

Erstellen eines Datenrahmens aus einer CSV-Datei

Verwenden Sie das Python-Paket pandas, um einen Datenrahmen zu erstellen und die CSV-Datei zu laden. Laden Sie den Datenrahmen anschließend in die neue SQL-Tabelle HumanResources.DepartmentTest.

  1. Stellen Sie eine Verbindung mit dem Python 3-Kernel her.

  2. Fügen Sie den folgenden Code in eine Codezelle ein, und aktualisieren Sie den Code mit den richtigen Werten für server, database, username, password sowie dem Speicherort der CSV-Datei.

    import pyodbc
    import pandas as pd
    # insert data from csv file into dataframe.
    # working directory for csv file: type "pwd" in Azure Data Studio or Linux
    # working directory in Windows c:\users\username
    df = pd.read_csv("c:\\user\\username\department.csv")
    # Some other example server values are
    # server = 'localhost\sqlexpress' # for a named instance
    # server = 'myserver,port' # to specify an alternate port
    server = 'yourservername' 
    database = 'AdventureWorks' 
    username = 'username' 
    password = 'yourpassword' 
    cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
    cursor = cnxn.cursor()
    # Insert Dataframe into SQL Server:
    for index, row in df.iterrows():
         cursor.execute("INSERT INTO HumanResources.DepartmentTest (DepartmentID,Name,GroupName) values(?,?,?)", row.DepartmentID, row.Name, row.GroupName)
    cnxn.commit()
    cursor.close()
    
  3. Führen Sie die Zelle aus.

Bestätigen der Daten in der Datenbank

Stellen Sie eine Verbindung mit dem SQL-Kernel und der AdventureWorks-Datenbank her. Bestätigen Sie dann durch Ausführung der folgenden SQL-Anweisung, dass die Tabelle erfolgreich mit Daten aus dem Datenrahmen geladen wurde.

SELECT count(*) from HumanResources.DepartmentTest;

Ergebnisse

(No column name)
16

Nächste Schritte