Schnellstart: Verwenden von Python zum Verbinden und Abfragen von Daten für Azure HorizonDB (Vorschau)

In dieser Schnellstartanleitung stellen Sie mithilfe von Python eine Verbindung mit einer Azure HorizonDB-Instanz her. Anschließend verwenden Sie SQL-Anweisungen zum Abfragen, Einfügen, Aktualisieren und Löschen von Daten in der Datenbank der Plattformen macOS, Ubuntu Linux und Windows.

Die Schritte in diesem Artikel umfassen die PostgreSQL-Authentifizierung.

Die PostgreSQL-Authentifizierung verwendet Konten, die in PostgreSQL gespeichert sind, und Sie müssen die Rotation der Kennwörter selbst verwalten.

In diesem Artikel wird davon ausgegangen, dass Sie mit der Entwicklung mit Python vertraut sind, aber Sie sind noch nicht mit Azure HorizonDB vertraut.

Voraussetzungen

Hinzufügen von Firewallregeln für Ihre Clientarbeitsstation

  • Wenn Sie Ihren Azure HorizonDB-Cluster mit Public-Zugriff (zulässige IP-Adressen) erstellt haben, können Sie Ihre lokale IP-Adresse der Liste der Firewallregeln in Ihrem Cluster hinzufügen. Weitere Informationen finden Sie unter Networking in Azure HorizonDB (Vorschau).

Vorbereiten der Entwicklungsumgebung

Wechseln Sie zu einem Ordner, in dem Sie den Code ausführen möchten, erstellen Sie anschließend eine virtuelle Umgebung, und aktivieren Sie diese. Eine virtuelle Umgebung ist ein eigenständiges Verzeichnis für eine bestimmte Python-Version sowie die anderen Pakete, die für diese Anwendung benötigt werden.

Führen Sie die folgenden Befehle aus, um eine virtuelle Umgebung zu erstellen und diese zu aktivieren:

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

Installieren der Python-Bibliotheken

Installieren Sie die Python-Bibliotheken, die zum Ausführen der Codebeispiele erforderlich sind.

Installieren Sie das Modul psycopg, das das Herstellen einer Verbindung mit einer PostgreSQL-Datenbank sowie das Abfragen einer PostgreSQL-Datenbank ermöglicht.

# 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

Hinzufügen von Authentifizierungscode

In diesem Abschnitt fügen Sie Ihrem Arbeitsverzeichnis Authentifizierungscode hinzu und führen alle zusätzlichen Schritte aus, die für die Authentifizierung und Autorisierung mit Ihrer Clusterinstanz erforderlich sind.

Bevor Sie den Authentifizierungscode hinzufügen, stellen Sie sicher, dass die erforderlichen Pakete für jedes Beispiel installiert sind.

Erforderliche Pakete (Beispiele in diesem Artikel):

  • Kennwortbeispiel: (empfohlen: psycopgpython -m pip install "psycopg[binary]")

Optional: Erstellen Sie eine requirements.txt mit diesen Einträgen und installieren Sie python -m pip install -r requirements.txt für reproduzierbare Installationen.

  1. Kopieren Sie den folgenden Code in einen Editor, und speichern Sie ihn in einer Datei namens 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. Rufen Sie Informationen zu Datenbankverbindungen ab.

    Verwenden des Azure-Portals:

    1. Wählen Sie im linken Menü im Azure Portal All resources aus, und suchen Sie dann nach dem erstellten Cluster.

    2. Wählen Sie den Clusternamen aus.

    3. Wählen Sie im Ressourcenmenü die Option "Übersicht" aus. Zeigen Sie mit der Maus auf den Wert, der als primärer Endpunkt angezeigt wird (Lese-/Schreibzugriff), und wählen Sie die Schaltfläche "In Zwischenablage kopieren" aus .

      Screenshot, der den Wert des primären Endpunkts auf der Seite „Übersicht“ zeigt.

    4. Sollten Sie das Kennwort der Administrationsanmeldung vergessen, können Sie es über die Schaltfläche Kennwort zurücksetzen zurücksetzen.

      Screenshot der Schaltfläche „Kennwort zurücksetzen“ auf der Seite „Übersicht“.

  3. Legen Sie Umgebungsvariablen für die URI-Elemente der Verbindung fest:

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

Ausführen der Python-Beispiele

Führen Sie für jedes Codebeispiel in diesem Artikel die folgenden Schritte aus:

  1. Erstellen Sie eine neue Datei in einem Text-Editor.

  2. Fügen Sie der Datei das Codebeispiel hinzu.

  3. Speichern Sie die Datei mit der Erweiterung .py in Ihrem Projektordner (Beispiel: postgres-insert.py). Achten Sie unter Windows darauf, dass beim Speichern die UTF-8-Codierung ausgewählt ist.

  4. Geben Sie in Ihrem Projektordner python gefolgt vom Dateinamen ein, z. B. python postgres-insert.py.

Erstellen einer Tabelle und Einfügen von Daten

Im folgenden Codebeispiel wird eine Verbindung mit Ihrem Azure HorizonDB-Cluster mithilfe der funktion psycopg.connect hergestellt und Daten mit einer SQL-INSERT-Anweisung geladen. Die cursor.execute-Funktion führt die SQL-Abfrage für die Datenbank aus.

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

Nach erfolgreicher Ausführung generiert der Code die folgende Ausgabe:

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

Daten lesen

Im folgenden Codebeispiel wird eine Verbindung mit Ihrem Azure HorizonDB-Cluster hergestellt und "cursor.execute" mit der SQL-SELECT-Anweisung zum Lesen von Daten verwendet. Diese Funktion akzeptiert eine Abfrage und gibt ein Resultset zurück, das mithilfe von cursor.fetchall() durchlaufen werden kann.

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

Nach erfolgreicher Ausführung generiert der Code die folgende Ausgabe:

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

Aktualisieren von Daten

Im folgenden Codebeispiel wird eine Verbindung mit Ihrem Azure HorizonDB-Cluster hergestellt und "cursor.execute" mit der SQL-UPDATE-Anweisung verwendet, um Daten zu aktualisieren.

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

Daten löschen

Im folgenden Codebeispiel wird eine Verbindung mit Ihrem Azure HorizonDB-Cluster hergestellt und "cursor.execute" mit der SQL-DELETE-Anweisung verwendet, um ein zuvor eingefügtes Bestandselement zu löschen.

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