Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
Die PostgreSQL-Authentifizierung verwendet Konten, die in PostgreSQL gespeichert sind. Wenn Sie Kennwörter als Anmeldeinformationen für die Konten verwenden, werden diese Anmeldeinformationen in der Tabelle user 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 Entwicklung mit Python vertraut sind, aber Sie sind neu bei der Arbeit mit Azure Database for PostgreSQL.
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 Azure-Datenbank für flexible Serverinstanz für PostgreSQL finden Sie unter Erstellen einer Azure-Datenbank für PostgreSQL.
- Python 3.8+.
- Aktuelles pip-Paketinstallationsprogramm.
Hinzufügen von Firewallregeln für Ihre Clientarbeitsstation
- Wenn Sie die Instanz von Azure Database for PostgreSQL – Flexibler Server mit der Einstellung Privater Zugriff (VNet-Integration) erstellt haben, müssen Sie über eine Ressource innerhalb desselben virtuellen Netzwerks eine Verbindung mit der Serverinstanz herstellen. Sie können eine VM erstellen und dem virtuellen Netzwerk hinzufügen, das mit Ihrer Instanz von Azure Database for PostgreSQL – Flexibler Server erstellt wurde. Verweisen Sie auf Netzwerk.
- Wenn Sie Ihre Instanz von Azure Database for PostgreSQL – Flexibler Server mit der Einstellung Öffentlicher Zugriff (zulässige IP-Adressen) erstellt haben, können Sie die lokale IP-Adresse der Liste der Firewallregeln für die Serverinstanz hinzufügen. Verweisen Sie auf Netzwerk.
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.
# Use the interpreter-bound pip to ensure installs go into the active venv/interpreter
python -m pip install --upgrade pip
python -m pip install azure-identity azure-keyvault-secrets
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.
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):
- Kennwortloses Beispiel:
azure-identity,azure-keyvault-secrets(wenn Sie Key Vault verwenden) - 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.
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_uriRufen Sie Informationen zu Datenbankverbindungen ab.
- Suchen Sie im Azure portal nach dem Namen Ihrer flexiblen Azure-Datenbankserverinstanz für PostgreSQL, 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 SicherheitAuthentifizierung 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=requireMelden 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.
Der Authentifizierungscode verwendet
DefaultAzureCredentialfür die Authentifizierung bei Microsoft Entra ID sowie zum Abrufen eines Tokens, das Sie zum Ausführen von Vorgängen auf Ihrer Serverinstanz autorisiert.DefaultAzureCredentialunterstü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
pythongefolgt 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-SQL-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
Lesen von Daten
Im folgenden Codebeispiel wird eine Verbindung mit Ihrer Azure Database for PostgreSQL Flexible Server-Datenbankinstanz hergestellt und cursor.execute mit der SQL-Anweisung SELECT verwendet, um Daten zu lesen. 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 Ihrer Azure Database for PostgreSQL Flexible Server-Datenbankinstanz hergestellt und cursor.execute mit der SQL-Anweisung UPDATE 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()
Löschen von Daten
Im folgenden Codebeispiel wird eine Verbindung mit Ihrer Azure Database for PostgreSQL Flexible Server-Datenbankinstanz hergestellt und cursor.execute mit der SQL-Anweisung DELETE 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()
Verwandte Inhalte
- Schnellstart: Verwenden von Java und JDBC mit Azure Database für PostgreSQL
- Schnellstart: Verwenden von .NET (C#) zum Verbinden und Abfragen von Daten in Azure-Datenbank für PostgreSQL
- Schnellstart: Verwenden der Go-Sprache zum Verbinden und Abfragen von Daten in Azure-Datenbank für PostgreSQL
- Schnellstart: Verwenden von PHP zum Verbinden und Abfragen von Daten in der Azure-Datenbank für PostgreSQL
- Schnellstart: Verbinden und Abfragen mit Azure CLI mit Azure Database for PostgreSQL
- Schnellstart: Importieren von Daten aus der Azure-Datenbank für PostgreSQL in Power BI