Démarrage rapide : Utiliser Python pour connecter et interroger des données pour Azure HorizonDB (préversion)

Dans ce guide de démarrage rapide, vous vous connectez à une instance Azure HorizonDB à l’aide de Python. Vous utiliserez ensuite des instructions SQL pour interroger, insérer, mettre à jour et supprimer des données de la base de données sur des plateformes macOS, Ubuntu Linux et Windows.

Les étapes décrites dans cet article incluent l’authentification PostgreSQL.

L’authentification PostgreSQL utilise des comptes stockés dans PostgreSQL et vous devez gérer la rotation des mots de passe par vous-même.

Cet article suppose que vous connaissez le développement à l'aide de Python, mais que vous débutez avec Azure HorizonDB.

Prerequisites

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

  • Si vous avez créé votre cluster Azure HorizonDB avec Public access (adresses IP autorisées), vous pouvez ajouter votre adresse IP locale à la liste des règles de pare-feu sur votre cluster. Reportez-vous à Networking dans Azure HorizonDB (préversion).

Préparer votre environnement de développement

Accédez au 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 le module psycopg, qui permet de se connecter à une base de données PostgreSQL et de l’interroger.

# Recommended: install the binary wheel that bundles a compatible libpq wrapper (Windows/macOS)
python -m pip install "psycopg[binary]"

# Linux alternative (if you prefer building against system libpq):
sudo apt-get update
sudo apt-get install -y libpq-dev build-essential python3-dev
python -m pip install psycopg

Ajout du code d’authentification

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

Avant d’ajouter le code d’authentification, vérifiez que les packages requis pour chaque exemple sont installés.

Packages requis (exemples dans cet article) :

  • Exemple de mot de passe : psycopg (recommandé : python -m pip install "psycopg[binary]")

Facultatif : créez une requirements.txt avec ces entrées et procédez à l’installation avec python -m pip install -r requirements.txt pour les installations reproductibles.

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

    import urllib.parse
    import os
    
    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'])
    password = os.environ['DBPASSWORD']
    sslmode = os.environ['SSLMODE']
    db_uri = f"host={dbhost} dbname={dbname} user={dbuser} password={password} sslmode={sslmode}"
       # Construct connection URI
       return db_uri
    
  2. Obtenez des informations de connexion à la base de données.

    Utilisation du portail Azure :

    1. Dans le menu de gauche du portail Azure, sélectionnez Toutes les ressources, puis recherchez le cluster que vous avez créé.

    2. Sélectionnez le nom du cluster.

    3. Dans le menu de ressources, sélectionnez Vue d’ensemble. Placez le curseur sur la valeur affichée en tant que point de terminaison principal (lecture/écriture) et sélectionnez le bouton Copier dans le Presse-papiers .

      Capture d’écran montrant la valeur du point de terminaison principal dans la page Vue d’ensemble.

    4. Si vous oubliez le mot de passe de la connexion administrateur, vous pouvez le réinitialiser à l'aide du bouton Réinitialiser le mot de passe.

      Capture d'écran montrant le bouton Réinitialiser le mot de passe dans la page Vue d'ensemble.

  3. Définissez des variables d’environnement pour les éléments de l’URI de connexion :

    set DBHOST=<cluster-name>
    set DBNAME=<database-name>
    set DBUSER=<username>
    set DBPASSWORD=<password>
    set SSLMODE=require
    

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 cluster Azure HorizonDB à l’aide de la fonction psycopg.connect et charge des 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 cluster Azure HorizonDB 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 cluster Azure HorizonDB 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 les données

L’exemple de code suivant se connecte à votre cluster Azure HorizonDB et utilise cursor.execute avec l’instruction SQL DELETE pour supprimer un élément d’inventaire que vous avez inséré précédemment.

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()