Condividi tramite


Inserire un dataframe Python in una tabella SQL

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di Azure

Questo articolo descrive come inserire un dataframe Pandas in un database SQL usando il pacchetto pyodbc in Python.

Prerequisiti

  • Azure Data Studio. Per informazioni sull'installazione, vedere Scaricare e installare Azure Data Studio.

  • Seguire la procedura descritta nei database di esempio AdventureWorks per ripristinare la versione OLTP del database di esempio AdventureWorks per la versione di SQL Server in uso.

    È possibile verificare se il database è stato ripristinato correttamente eseguendo una query sulla tabella HumanResources.Department:

    USE AdventureWorks;
    SELECT * FROM HumanResources.Department;
    

Installare i pacchetti Python

  1. In Azure Data Studio aprire un nuovo notebook e connettersi al kernel Python 3.

  2. Selezionare Gestisci pacchetti.

    Manage packages

  3. Nel riquadro Gestisci pacchetti selezionare la scheda Aggiungi nuovo.

  4. Per ognuno dei seguenti pacchetti immettere il nome del pacchetto, fare clic su Cerca, quindi fare clic su Installa.

    • pyodbc
    • pandas

Creare un file CSV di esempio

Copiare il testo seguente e salvarlo in un file denominato 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

Creare un nuovo database

  1. Seguire la procedura descritta in Connettersi a SQL Server per eseguire la connessione al database AdventureWorks.

  2. Creare una tabella denominata HumanResources.DepartmentTest. La tabella SQL verrà usata per l'inserimento del dataframe.

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

Caricare un dataframe da un file CSV.

Usare il pacchetto Python pandas per creare un dataframe, caricare il file CSV e quindi caricare il dataframe nella nuova tabella SQL HumanResources.DepartmentTest.

  1. Connettersi al kernel Python 3.

  2. Incollare il codice seguente in una cella di codice, in modo da aggiornare il codice con i valori corretti per i parametri server, database, username, password, e il percorso del file CSV.

    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. Eseguire la cella.

Confermare i dati nel database

Connettersi al kernel SQL e al database AdventureWorks ed eseguire l'istruzione SQL seguente per verificare che la tabella sia stata correttamente caricata con i dati del dataframe.

SELECT count(*) from HumanResources.DepartmentTest;

Risultati

(No column name)
16

Passaggi successivi