Insertar un dataframe de Python en una tabla SQL

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

En este artículo se describe cómo insertar un dataframe de Pandas en una base de datos SQL mediante el paquete pyodbc en Python.

Requisitos previos

  • Azure Data Studio. Para la instalación, consulte Descarga e instalación de Azure Data Studio.

  • Siga los pasos de Bases de datos de ejemplo de AdventureWorks para restaurar la versión OLTP de la base de datos de ejemplo de AdventureWorks para su versión de SQL Server.

    Puede comprobar que la base de datos se ha restaurado correctamente consultando la tabla HumanResources.Department:

    USE AdventureWorks;
    SELECT * FROM HumanResources.Department;
    

Instalación de paquetes de Python

  1. En Azure Data Studio, abra un nuevo cuaderno y conéctese al kernel de Python 3.

  2. Haga clic en Administrar paquetes.

    Administración de paquetes

  3. En el panel Administrar paquetes, seleccione la pestaña Agregar nuevo.

  4. Para cada uno de los paquetes siguientes, escriba el nombre del paquete, haga clic en Buscar y, a continuación, haga clic en instalar.

    • pyodbc
    • Pandas

Creación de un archivo CSV de ejemplo

Copie el texto siguiente y guárdelo en un archivo denominado 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

Creación de una nueva tabla de base de datos

  1. Siga los pasos de Conexión a una instancia de SQL Server para conectarse a la base de datos de AdventureWorks.

  2. Cree una tabla denominada HumanResources.DepartmentTest. La tabla SQL se utilizará para la inserción de un dataframe.

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

Carga de una trama de datos a partir del archivo .csv

Utilice el paquete Python pandas para crear una trama de datos, cargar el archivo .csv y, a continuación, cargar la trama de datos en la nueva tabla SQL, HumanResources.DepartmentTest.

  1. Conecte con el kernel de Python 3.

  2. Pegue el siguiente código en una celda de código, actualizando el código con los valores correctos para server, database, username, password y la ubicación del archivo .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. Ejecute la celda.

Confirmación de los datos de la base de datos

Conecte con el kernel de SQL y con la base de datos AdventureWorks y ejecute la siguiente instrucción SQL para confirmar que la tabla se ha cargado correctamente con los datos de la trama de datos.

SELECT count(*) from HumanResources.DepartmentTest;

Results

(No column name)
16

Pasos siguientes