Insertar un dataframe de Python en una tabla SQL
Se aplica a: SQL Server Azure SQL Database Azure 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
SQL Server Management Studio para restaurar la base de datos de ejemplo en Azure SQL Managed Instance.
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
En Azure Data Studio, abra un nuevo cuaderno y conéctese al kernel de Python 3.
Haga clic en Administrar paquetes.
En el panel Administrar paquetes, seleccione la pestaña Agregar nuevo.
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
Siga los pasos de Conexión a una instancia de SQL Server para conectarse a la base de datos de AdventureWorks.
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.
Conecte con el kernel de Python 3.
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()
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