Partilhar via


Inserir um data frame do Python numa tabela SQL

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Este artigo descreve como inserir um dataframe pandas em um banco de dados SQL usando o pacote Pyodbc em Python.

Prerequisites

  • Azure Data Studio. Para instalar, consulte Baixar e instalar o Azure Data Studio.

  • Siga as etapas em bancos de dados de exemplo AdventureWorks para restaurar a versão OLTP do banco de dados de exemplo AdventureWorks para sua versão do SQL Server.

    Você pode verificar se o banco de dados foi restaurado corretamente consultando a tabela HumanResources.Department :

    USE AdventureWorks;
    SELECT * FROM HumanResources.Department;
    

Instalar pacotes Python

  1. No Azure Data Studio, abra um novo bloco de anotações e conecte-se ao kernel do Python 3.

  2. Selecione Gerenciar pacotes.

    Gerenciar pacotes

  3. No painel Gerenciar pacotes , selecione a guia Adicionar novo .

  4. Para cada um dos seguintes pacotes, insira o nome do pacote, selecione Pesquisar e, em seguida, selecione Instalar.

    • pyodbc
    • pandas

Criar um arquivo CSV de exemplo

Copie o texto a seguir e salve-o em um arquivo chamado 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

Criar uma nova tabela de banco de dados

  1. Siga as etapas em Conectar-se a um SQL Server para se conectar ao banco de dados AdventureWorks.

  2. Crie uma tabela chamada HumanResources.DepartmentTest. A tabela SQL será usada para a inserção do dataframe.

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

Carregar um dataframe a partir do arquivo CSV

Use o pacote Python pandas para criar um dataframe, carregar o arquivo CSV e, em seguida, carregar o dataframe na nova tabela SQL, HumanResources.DepartmentTest.

  1. Conecte-se ao kernel Python 3 .

  2. Cole o código a seguir em uma célula de código, atualizando o código com os valores corretos para server, database, username, password, e o local do arquivo 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. Executar a célula.

Confirmar dados na base de dados

Conecte-se ao kernel SQL e ao banco de dados AdventureWorks e execute a seguinte instrução SQL para confirmar que a tabela foi carregada com êxito com dados do dataframe.

SELECT count(*) from HumanResources.DepartmentTest;

Results

(No column name)
16

Próximo passo