Partager via


Étape 3 : Preuve de concept pour se connecter à SQL à l’aide de pyodbc

Cet exemple de preuve de concept utilise pyodbc pour se connecter à une base de données SQL. Dans cet exemple, on suppose que vous utilisez l’exemple de base de données AdventureWorksLT.

Remarque

Cet exemple doit être considéré uniquement comme une preuve de concept. L’exemple de code est simplifié par souci de clarté et ne représente pas nécessairement les meilleures pratiques recommandées par Microsoft.

Conditions préalables

  • Python 3
    • Si vous n’avez pas encore Python, installez le runtime Python et le gestionnaire de package Python Package Index (PyPI) à partir de python.org.
    • Si vous préférez ne pas utiliser votre propre environnement, ouvrez en tant que devcontainer à l’aide de GitHub Codespaces.
      • Ouvrir dans un GitHub Codespaces.
  • Package pyodbc à partir de PyPI.
  • Installation de Microsoft ODBC Driver 18 pour SQL Server
  • Une base de données SQL et des informations d’identification.

Connecter et interroger des données

Connectez-vous à une base de données à l’aide de vos informations d’identification.

  1. Créez un fichier nommé app.py.

  2. Ajoutez une description docstring du module.

    """
    Connects to a SQL database using pyodbc
    """
    
  3. Importez le package pyodbc.

    import pyodbc
    
  4. Créez des variables pour vos identifiants de connexion.

    SERVER = '<server-address>'
    DATABASE = '<database-name>'
    USERNAME = '<username>'
    PASSWORD = '<password>'
    
  5. Créez une variable de chaîne de connexion à l’aide de l’interpolation de chaîne.

    connectionString = f'DRIVER={{ODBC Driver 18 for SQL Server}};SERVER={SERVER};DATABASE={DATABASE};UID={USERNAME};PWD={PASSWORD}'
    
  6. Utilisez la pyodbc.connect fonction pour vous connecter à une base de données SQL.

    conn = pyodbc.connect(connectionString) 
    

Exécuter une requête

Utilisez une chaîne de requête SQL pour exécuter une requête et analyser les résultats.

  1. Créez une variable pour la chaîne de requête SQL.

    SQL_QUERY = """
    SELECT 
    TOP 5 c.CustomerID, 
    c.CompanyName, 
    COUNT(soh.SalesOrderID) AS OrderCount 
    FROM 
    SalesLT.Customer AS c 
    LEFT OUTER JOIN SalesLT.SalesOrderHeader AS soh ON c.CustomerID = soh.CustomerID 
    GROUP BY 
    c.CustomerID, 
    c.CompanyName 
    ORDER BY 
    OrderCount DESC;
    """
    
  2. Utilisez cursor.execute pour récupérer un jeu de résultats à partir d’une requête sur la base de données.

    cursor = conn.cursor()
    cursor.execute(SQL_QUERY)
    

    Remarque

    Cette fonction accepte n’importe quelle requête et renvoie un jeu de résultats qui peut être itéré à l’aide de cursor.fetchone().

  3. Utilisez cursor.fetchall avec une boucle foreach pour obtenir tous les enregistrements de la base de données. Ensuite, imprimez les enregistrements.

    records = cursor.fetchall()
    for r in records:
        print(f"{r.CustomerID}\t{r.OrderCount}\t{r.CompanyName}")
    
  4. Enregistrez le fichier app.py.

  5. Ouvrez un terminal et testez l’application.

    python app.py
    
    29485   1       Professional Sales and Service
    29531   1       Remarkable Bike Store
    29546   1       Bulk Discount Store
    29568   1       Coalition Bike Company
    29584   1       Futuristic Bikes
    

Insérer une ligne en tant que transaction

Dans cet exemple, vous allez exécuter une instruction INSERT en toute sécurité et passer des paramètres. Le passage de paramètres en tant que valeurs protège votre application contre les attaques par injection de code SQL.

  1. Importez randrange à partir de la bibliothèque random.

    from random import randrange
    
  2. Générez un numéro de produit aléatoire.

    productNumber = randrange(1000)
    

    Conseil

    Générer un numéro de produit aléatoire ici vous garantit de pouvoir exécuter cet exemple plusieurs fois.

  3. Créez une chaîne d’instruction SQL.

    SQL_STATEMENT = """
    INSERT SalesLT.Product (
    Name, 
    ProductNumber, 
    StandardCost, 
    ListPrice, 
    SellStartDate
    ) OUTPUT INSERTED.ProductID 
    VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)
    """
    
  4. Exécutez l’instruction à l’aide de cursor.execute.

    cursor.execute(
        SQL_STATEMENT,
        f'Example Product {productNumber}', 
        f'EXAMPLE-{productNumber}', 
        100,
        200
    )
    
  5. Récupérez la première colonne du résultat unique à l’aide de cursor.fetchval, imprimez l’identificateur unique du résultat, puis validez l’opération en tant que transaction à l’aide de connection.commit.

    resultId = cursor.fetchval()
    print(f"Inserted Product ID : {resultId}")
    conn.commit()
    

    Conseil

    Éventuellement, vous pouvez utiliser connection.rollback pour restaurer la transaction.

  6. Fermez le curseur et la connexion à l’aide de cursor.close et connection.close.

    cursor.close()
    conn.close()
    
  7. Enregistrez le fichier app.py et testez à nouveau l’application

    python app.py
    
    Inserted Product ID : 1001
    

Étapes suivantes