Partage via


Démarrage rapide : Utiliser Python afin de se connecter à Azure Database pour PostgreSQL - Serveur unique et d'interroger les données

S’APPLIQUE À : Azure Database pour PostgreSQL - Serveur flexible

Dans ce guide de démarrage rapide, vous vous connectez à une instance Azure Database pour PostgreSQL – Serveur flexible en utilisant Python. Vous utilisez ensuite des instructions SQL pour interroger, insérer, mettre à jour et supprimer des données dans la base de données depuis des plateformes macOS, Ubuntu Linux et Windows.

Les étapes de cet article incluent deux méthodes d’authentification : l’authentification Microsoft Entra et l’authentification PostgreSQL. L’onglet Sans mot de passe affiche l’authentification Microsoft Entra et l’onglet Mot de passe affiche l’authentification PostgreSQL.

L’authentification Microsoft Entra est un mécanisme de connexion à Azure Database pour PostgreSQL utilisant les identités définies dans Microsoft Entra ID. Avec l’authentification Microsoft Entra, vous pouvez gérer les identités des utilisateurs de base de données et d’autres services Microsoft dans un emplacement centralisé, ce qui simplifie la gestion des autorisations. Pour en savoir plus, consultez Authentification Microsoft Entra avec Azure Database pour PostgreSQL – Serveur flexible.

L’authentification PostgreSQL utilise des comptes stockés dans PostgreSQL. Si vous choisissez d’utiliser des mots de passe comme informations d’identification pour les comptes, ces informations d’identification sont stockées dans la table user. Comme ces mots de passe sont stockés dans PostgreSQL, vous devez gérer vous-même la rotation des mots de passe.

Cet article part du principe que vous connaissez les bases du développement avec Python, mais que vous débutez avec Azure Database pour PostgreSQL – Serveur flexible.

Prérequis

Ajouter des règles de pare-feu pour votre station de travail cliente

Configurer l’intégration de Microsoft Entra sur le serveur (sans mot de passe uniquement)

Si vous suivez les étapes de l’authentification sans mot de passe, l’authentification Microsoft Entra doit être configurée pour votre instance de serveur et le rôle d’administrateur Microsoft Entra doit vous être attribué sur l’instance de serveur. Suivez les étapes décrites dans Configurer l’intégration de Microsoft Entra pour faire en sorte que l’authentification Microsoft Entra soit configurée pour votre instance de serveur et que le rôle d’administrateur Microsoft Entra vous soit attribué sur votre instance de serveur.

Préparer votre environnement de développement

Accédez à un dossier où vous voulez exécuter le code, et créer et activer un environnement virtuel. Un environnement virtuel est un répertoire autonome pour une version particulière de Python ainsi que les autres packages nécessaires pour cette application.

Exécutez les commandes suivantes pour créer et activer un environnement virtuel :

py -3 -m venv .venv
.venv\Scripts\activate

Installer les bibliothèques Python

Installez les bibliothèques Python nécessaires pour exécuter les exemples de code.

Installez la bibliothèque azure-identity, qui assure la prise en charge de l’authentification par jeton Microsoft Entra dans le Kit de développement logiciel (SDK) Azure.

pip install azure-identity

Ajouter du code pour l’authentification

Dans cette section, vous ajoutez du code pour l’authentification à votre répertoire de travail, et vous effectuez les étapes supplémentaires requises pour l’authentification et l’autorisation avec votre instance de serveur.

  1. Copiez le code suivant dans un éditeur et enregistrez-le dans un fichier nommé get_conn.py.

    import urllib.parse
    import os
    
    from azure.identity import DefaultAzureCredential
    
    # IMPORTANT! This code is for demonstration purposes only. It's not suitable for use in production. 
    # For example, tokens issued by Microsoft Entra ID have a limited lifetime (24 hours by default). 
    # In production code, you need to implement a token refresh policy.
    
    def get_connection_uri():
    
        # Read URI parameters from the environment
        dbhost = os.environ['DBHOST']
        dbname = os.environ['DBNAME']
        dbuser = urllib.parse.quote(os.environ['DBUSER'])
        sslmode = os.environ['SSLMODE']
    
        # Use passwordless authentication via DefaultAzureCredential.
        # IMPORTANT! This code is for demonstration purposes only. DefaultAzureCredential() is invoked on every call.
        # In practice, it's better to persist the credential across calls and reuse it so you can take advantage of token
        # caching and minimize round trips to the identity provider. To learn more, see:
        # https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/identity/azure-identity/TOKEN_CACHING.md 
        credential = DefaultAzureCredential()
    
        # Call get_token() to get a token from Microsft Entra ID and add it as the password in the URI.
        # Note the requested scope parameter in the call to get_token, "https://ossrdbms-aad.database.windows.net/.default".
        password = credential.get_token("https://ossrdbms-aad.database.windows.net/.default").token
    
        db_uri = f"postgresql://{dbuser}:{password}@{dbhost}/{dbname}?sslmode={sslmode}"
        return db_uri
    
  2. Obtenez les informations de connexion à la base de données.

    1. Dans le portail Azure, recherchez et sélectionnez le nom de votre serveur Azure Database pour PostgreSQL – Serveur flexible.
    2. Dans la page Vue d’ensemble du serveur, copiez le nom du serveur complet. Le nom de serveur complet se présente toujours sous la forme <my-server-name>.postgres.database.azure.com.
    3. Dans le menu de gauche, sous Sécurité, sélectionnez Authentification. Vérifiez que votre compte est listé sous Administrateurs Microsoft Entra. Si ce n’est pas le cas, effectuez les étapes décrites dans Configurer l’intégration de Microsoft Entra sur le serveur (sans mot de passe uniquement).
  3. Définissez des variables d’environnement pour les éléments de l’URI de connexion :

    set DBHOST=<server-name>
    set DBNAME=<database-name>
    set DBUSER=<username>
    set SSLMODE=require
    

    Remplacez les valeurs des espaces réservés suivants dans les commandes :

    • <server-name> par la valeur que vous avez copiée à partir du portail Azure.
    • <username> par votre nom d’utilisateur Azure, par exemple : john@contoso.com.
    • <database-name> par le nom de votre base de données Azure Database pour PostgreSQL – Serveur flexible. Une base de données par défaut nommée postgres a été automatiquement créée lorsque vous avez créé votre serveur. Vous pouvez utiliser cette base de données ou créer une nouvelle base de données en utilisant des commandes SQL.
  4. Connectez-vous à Azure sur votre station de travail. Vous pouvez vous connecter en utilisant Azure CLI, Azure PowerShell ou Azure Developer CLI. Par exemple, pour vous connecter via Azure CLI, entrez cette commande :

    az login
    

    Le code pour l’authentification utilise DefaultAzureCredential pour s’authentifier auprès de Microsoft Entra ID et obtenir un jeton qui vous autorise à effectuer des opérations sur votre instance de serveur. DefaultAzureCredential prend en charge une chaîne de types d’informations d’identification d’authentification. Parmi les informations d’identification prises en charge se trouvent les informations d’identification avec lesquelles vous vous êtes connecté à des outils de développement comme Azure CLI, Azure PowerShell ou Azure Developer CLI.

Comment exécuter les exemples Python

Pour chaque exemple de code dans cet article :

  1. Créez un fichier dans un éditeur de texte.

  2. Ajoutez l’exemple de code au fichier.

  3. Enregistrez le fichier dans votre dossier de projets avec l’extension .py, comme postgres-insert.py. Pour Windows, assurez-vous que l’encodage UTF-8 est sélectionné lorsque vous enregistrez le fichier.

  4. Dans votre dossier de projet, tapez python suivi du nom de fichier ; par exemple python postgres-insert.py.

Créer une table et insérer des données

L’exemple de code suivant se connecte à votre base de données Azure Database pour PostgreSQL – Serveur flexible en utilisant la fonction psycopg.connect et charge les données avec une instruction SQL INSERT. La fonction cursor.execute exécute la requête SQL sur la base de données.

import psycopg
from get_conn import get_connection_uri

conn_string = get_connection_uri()

conn = psycopg.connect(conn_string) 
print("Connection established")
cursor = conn.cursor()

# Drop previous table of same name if one exists
cursor.execute("DROP TABLE IF EXISTS inventory;")
print("Finished dropping table (if existed)")

# Create a table
cursor.execute("CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);")
print("Finished creating table")

# Insert some data into the table
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("banana", 150))
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("orange", 154))
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("apple", 100))
print("Inserted 3 rows of data")

# Clean up
conn.commit()
cursor.close()
conn.close()

Lorsque le code est exécuté correctement, il produit le résultat suivant :

Connection established
Finished dropping table (if existed)
Finished creating table
Inserted 3 rows of data

Lire les données

L’exemple de code suivant se connecte à votre base de données Azure Database pour PostgreSQL – Serveur flexible et utilise cursor.execute avec l’instruction SQL SELECT pour lire les données. Cette fonction accepte une requête et renvoie un jeu de résultats pour itérer en utilisant cursor.fetchall().

import psycopg
from get_conn import get_connection_uri

conn_string = get_connection_uri()

conn = psycopg.connect(conn_string) 
print("Connection established")
cursor = conn.cursor()

# Fetch all rows from table
cursor.execute("SELECT * FROM inventory;")
rows = cursor.fetchall()

# Print all rows
for row in rows:
    print("Data row = (%s, %s, %s)" %(str(row[0]), str(row[1]), str(row[2])))

# Cleanup
conn.commit()
cursor.close()
conn.close()

Lorsque le code est exécuté correctement, il produit le résultat suivant :

Connection established
Data row = (1, banana, 150)
Data row = (2, orange, 154)
Data row = (3, apple, 100)

Mettre à jour des données

L’exemple de code suivant se connecte à votre base de données Azure Database pour PostgreSQL – Serveur flexible et utilise cursor.execute avec l’instruction SQL UPDATE pour mettre à jour les données.

import psycopg
from get_conn import get_connection_uri

conn_string = get_connection_uri()

conn = psycopg.connect(conn_string) 
print("Connection established")
cursor = conn.cursor()

# Update a data row in the table
cursor.execute("UPDATE inventory SET quantity = %s WHERE name = %s;", (200, "banana"))
print("Updated 1 row of data")

# Cleanup
conn.commit()
cursor.close()
conn.close()

Supprimer des données

L’exemple de code suivant se connecte à votre base de données Azure Database pour PostgreSQL – Serveur flexible et utilise cursor.execute avec l’instruction SQL DELETE pour supprimer un élément du stock que vous aviez précédemment inséré.

import psycopg
from get_conn import get_connection_uri

conn_string = get_connection_uri()

conn = psycopg.connect(conn_string) 
print("Connection established")
cursor = conn.cursor()

# Delete data row from table
cursor.execute("DELETE FROM inventory WHERE name = %s;", ("orange",))
print("Deleted 1 row of data")

# Cleanup
conn.commit()
cursor.close()
conn.close()

Étapes suivantes