Schnellstart: Verwenden von Python zum Herstellen einer Verbindung mit Azure Database for PostgreSQL Flexible Server sowie zum Abfragen von Daten
GILT FÜR: Azure Database for PostgreSQL – Flexibler Server
In diesem Schnellstart stellen Sie mithilfe von Python eine Verbindung mit einer Instanz von Azure Database for PostgreSQL Flexible Server 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 schließen zwei Authentifizierungsmethoden ein: die Microsoft Entra-Authentifizierung und die PostgreSQL-Authentifizierung. Die Registerkarte Kennwortlos zeigt die Microsoft Entra-Authentifizierung und die Registerkarte Kennwort die PostgreSQL-Authentifizierung.
Die Microsoft Entra-Authentifizierung ist ein Mechanismus zum Herstellen einer Verbindung mit Azure Database for PostgreSQL unter Verwendung von Identitäten, die in Microsoft Entra ID definiert sind. Mit der Microsoft Entra-Authentifizierung können Sie Datenbankbenutzeridentitäten und andere Microsoft-Dienste an einem zentralen Ort verwalten, wodurch die Berechtigungsverwaltung vereinfacht wird. Weitere Informationen finden Sie unter Microsoft Entra-Authentifizierung mit Azure Database for PostgreSQL – Flexible Server .
Die PostgreSQL-Authentifizierung verwendet Konten, die in PostgreSQL gespeichert sind. Wenn Sie Kennwörter als Anmeldeinformationen für die Konten verwenden möchten, werden diese Anmeldeinformationen in der user
-Tabelle gespeichert. Da diese Kennwörter in PostgreSQL gespeichert sind, müssen Sie die Rotation der Kennwörter selbst verwalten.
In diesem Artikel wird davon ausgegangen, dass Sie mit der Python-Entwicklung vertraut sind, jedoch mit Azure Database for PostgreSQL Flexible Server noch keine Erfahrung haben.
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
- Eine Instanz von Azure Database for PostgreSQL – Flexibler Server. Informationen zum Erstellen einer Instanz von Azure Database for PostgreSQL Flexible Server finden Sie unter Erstellen einer Instanz von Azure Database for PostgreSQL – Flexible Server mithilfe des Azure-Portals.
- Python 3.8+.
- Aktuelles pip-Paketinstallationsprogramm.
Hinzufügen von Firewallregeln für Ihre Clientarbeitsstation
- Wenn Sie Ihre Instanz von Azure Database for PostgreSQL Flexible Server mit privatem Zugriff (VNet-Integration) erstellt haben, müssen Sie über eine Ressource innerhalb desselben VNet wie Ihr Server eine Verbindung mit Ihrem Server herstellen. Sie können eine VM erstellen und dem VNet hinzufügen, das mit Ihrer Instanz von Azure Database for PostgreSQL Flexible Server erstellt wurde. Weitere Informationen finden Sie unter Erstellen und Verwalten von virtuellen Netzwerken für Azure Database for PostgreSQL Flexible Server mit der Azure CLI.
- Wenn Sie Ihre Instanz von Azure Database for PostgreSQL Flexible Server mit öffentlichem Zugriff (zulässige IP-Adressen) erstellt haben, können Sie Ihre lokale IP-Adresse zur Liste der Firewallregeln auf Ihrem Server hinzufügen. Weitere Informationen finden Sie unter Erstellen und Verwalten von Firewallregeln für Azure Database for PostgreSQL Flexible Server mithilfe der Azure CLI.
Konfigurieren der Microsoft Entra-Integration auf dem Server (nur kennwortlos)
Beim Ausführen der Schritte für die kennwortlose Authentifizierung muss die Microsoft Entra-Authentifizierung für Ihre Serverinstanz konfiguriert sein, und Sie müssen auf der Serverinstanz als Microsoft Entra-Administrator zugewiesen sein. Führen Sie die Schritte im Artikel Konfigurieren der Microsoft Entra-Integration aus, um sicherzustellen, dass die Microsoft Entra-Authentifizierung konfiguriert ist und Sie auf Ihrer Serverinstanz als Microsoft Entra-Administrator zugewiesen sind.
Vorbereiten Ihrer 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 die azure-identity-Bibliothek, die Microsoft Entra-Tokenauthentifizierungsunterstützung für das Azure SDK bereitstellt.
pip install azure-identity
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 Serverinstanz erforderlich sind.
Kopieren Sie den folgenden Code in einen Editor, und speichern Sie ihn in einer Datei namens 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
Rufen Sie Informationen zu Datenbankverbindungen ab.
- Suchen Sie im Azure-Portal nach dem Namen Ihrer Instanz von Azure Database for PostgreSQL Flexible Server, und wählen Sie ihn aus.
- Kopieren Sie auf der Seite Übersicht des Servers den vollqualifizierten Servernamen. Der vollqualifizierte Servername hat immer das Format <Servername>.postgres.database.azure.com.
- Wählen Sie im linken Menü unter Sicherheit Authentifizierung aus. Stellen Sie sicher, dass Ihr Konto unter Microsoft Entra-Administratoren aufgeführt ist. Führen Sie andernfalls die Schritte im Abschnitt Konfigurieren der Microsoft Entra-Integration auf dem Server (nur kennwortlos) aus.
Legen Sie Umgebungsvariablen für die URI-Elemente der Verbindung fest:
set DBHOST=<server-name> set DBNAME=<database-name> set DBUSER=<username> set SSLMODE=require
Ersetzen Sie die folgenden Platzhalterwerte in den Befehlen:
<server-name>
durch den Wert, den Sie aus dem Azure-Portal kopiert haben<username>
durch Ihren Azure-Benutzernamen, zum Beispiel:john@contoso.com
.<database-name>
durch den Namen Ihrer Datenbank von Azure Database for PostgreSQL Flexible Server. Bei der Servererstellung wurde automatisch eine Standarddatenbank namens postgres erstellt. Sie können diese Datenbank verwenden oder mithilfe von SQL-Befehlen eine neue Datenbank erstellen.
Melden Sie sich auf Ihrer Arbeitsstation bei Azure an. Sie können sich mithilfe der Azure CLI oder mithilfe von Azure PowerShell oder Azure Developer CLI anmelden. Geben Sie beispielsweise diesen Befehl ein, um sich über die Azure CLI anzumelden:
az login
Der Authentifizierungscode verwendet
DefaultAzureCredential
für die Authentifizierung bei Microsoft Entra ID sowie zum Abrufen eines Tokens, das Sie zum Ausführen von Vorgängen auf Ihrer Serverinstanz autorisiert.DefaultAzureCredential
unterstützt eine Kette von Anmeldeinformationstypen für die Authentifizierung. Zu den unterstützten Anmeldeinformationen gehören Anmeldeinformationen, mit denen Sie bei Entwicklertools wie der Azure CLI, Azure PowerShell oder Azure Developer CLI angemeldet sind.
Ausführen der Python-Beispiele
Führen Sie für jedes Codebeispiel in diesem Artikel die folgenden Schritte aus:
Erstellen Sie eine neue Datei in einem Text-Editor.
Fügen Sie der Datei das Codebeispiel hinzu.
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.
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 mithilfe der psycopg.connect
-Funktion eine Verbindung mit Ihrer Datenbank von Azure Database for PostgreSQL Flexible Server hergestellt. Zudem werden Daten mit einer INSERT-Anweisung von SQL 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
Lesen von Daten
Im folgenden Codebeispiel wird eine Verbindung mit Ihrer Datenbank von Azure Database for PostgreSQL Flexible Server hergestellt und cursor.execute mit der SELECT-Anweisung von SQL 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)
Daten aktualisieren
Im folgenden Codebeispiel wird eine Verbindung mit Ihrer Datenbank von Azure Database for PostgreSQL Flexible Server hergestellt und cursor.execute mit der UPDATE-Anweisung von SQL zum Aktualisieren von Daten verwendet.
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()
Löschen von Daten
Im folgenden Codebeispiel wird eine Verbindung mit Ihrer Datenbank von Azure Database for PostgreSQL Flexible Server hergestellt und cursor.execute mit der DELETE-Anweisung von SQL verwendet, um einen zuvor eingefügten Lagerartikel 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()