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
- Compte Azure avec un abonnement actif. Créez un compte gratuitement.
- Une instance Azure Database pour PostgreSQL Serveur flexible. Pour créer une instance Azure Database pour PostgreSQL – Serveur flexible, consultez Créer une instance Azure Database pour PostgreSQL – Serveur flexible en utilisant le portail Azure.
- Python 3.8 et version ultérieure.
- Dernier programme d’installation de package pip.
Ajouter des règles de pare-feu pour votre station de travail cliente
- Si vous avez créé votre instance Azure Database pour PostgreSQL – Serveur flexible avec l’option Accès privé (intégration au réseau virtuel), vous devez vous connecter à votre serveur depuis une ressource qui se trouve au sein du même réseau virtuel que votre serveur. Vous pouvez créer une machine virtuelle et l’ajouter au réseau virtuel créé avec votre instance Azure Database pour PostgreSQL – Serveur flexible. Reportez-vous à Créer et gérer un réseau virtuel Azure Database pour PostgreSQL - Serveur flexible à l'aide du portail Azure.
- Si vous avez créé votre instance Azure Database pour PostgreSQL – Serveur flexible avec l’option Accès public (adresses IP autorisées), vous pouvez ajouter votre adresse IP locale à la liste des règles de pare-feu sur votre serveur. Reportez-vous à Créer et gérer des règles de pare-feu Azure Database pour PostgreSQL - Serveur flexible à l'aide d'Azure CLI.
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.
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
Obtenez les informations de connexion à la base de données.
- Dans le portail Azure, recherchez et sélectionnez le nom de votre serveur Azure Database pour PostgreSQL – Serveur flexible.
- 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.
- 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).
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.
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 :
Créez un fichier dans un éditeur de texte.
Ajoutez l’exemple de code au fichier.
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.
Dans votre dossier de projet, tapez
python
suivi du nom de fichier ; par exemplepython 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()