Insertion d’une trame de données Python dans une table SQL

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Cet article explique comment insérer une trame de données Pandas dans une base de données SQL à l’aide du package pyodbc en Python.

Prérequis

  • Azure Data Studio. Pour l’installation, consultez Téléchargez et installez Azure Data Studio.

  • Procédez comme indiqué à la section Exemples de bases de données AdventureWorks pour restaurer la version OLTP de l’exemple de base de données AdventureWorks pour votre version de SQL Server.

    Vous pouvez vérifier que la base de données a été correctement restaurée en interrogeant la table HumanResources.Department :

    USE AdventureWorks;
    SELECT * FROM HumanResources.Department;
    

Installer des packages Python

  1. Dans Azure Data Studio, ouvrez un nouveau notebook et connectez-vous au noyau Python 3.

  2. Sélectionnez Gérer les packages.

    Gérer les packages

  3. Dans le volet Gérer les packages, sélectionnez l’onglet Ajouter nouveau.

  4. Pour chacun des packages suivants, entrez le nom du package, cliquez sur Rechercher, puis cliquez sur Installer.

    • pyodbc
    • pandas

Créer un exemple de fichier CSV

Copiez le texte suivant et enregistrez-le dans un fichier nommé 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

Créer une table de base de données

  1. Procédez comme indiqué à la section Se connecter à un serveur SQL Server pour vous connecter à la base de données AdventureWorks.

  2. Créez une table nommée HumanResources.DepartmentTest. qui sera utilisée pour l’insertion de la trame de données.

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

Chargez un dataframe à partir du fichier CSV

Utilisez le package Python pandas pour créer un dataframe, chargez le fichier CSV, puis chargez le dataframe dans la nouvelle table SQL, HumanResources.DepartmentTest.

  1. Se connecter au noyau Python 3.

  2. Collez le code suivant dans une cellule de code, en mettant à jour le code avec les valeurs correctes pour server, database, username, password et l’emplacement du fichier 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. Exécutez la cellule.

Confirmer des données dans la base de données

Connectez-vous au noyau SQL et à la base de données AdventureWorks, puis exécutez l’instruction SQL suivante pour confirmer que la table a été correctement chargée avec les données issues du dataframe.

SELECT count(*) from HumanResources.DepartmentTest;

Résultats

(No column name)
16

Étapes suivantes