Guida introduttiva: Usare Python per connettersi ai dati ed eseguire query nel server flessibile di Database di Azure per PostgreSQL
SI APPLICA A: Database di Azure per PostgreSQL - Server flessibile
In questo argomento di avvio rapido ci si connette a un'istanza del server flessibile di Database di Azure per PostgreSQL tramite Python. È quindi possibile usare istruzioni SQL per eseguire query, inserire, aggiornare ed eliminare dati nel database dalle piattaforme macOS, Ubuntu Linux e Windows.
In questo articolo verranno inclusi due metodi di autenticazione: autenticazione Microsoft Entra e autenticazione PostgreSQL. La scheda Senza password mostra l'autenticazione Microsoft Entra, la scheda Password l'autenticazione PostgreSQL.
L'autenticazione Microsoft Entra è un meccanismo per connettersi a Database di Azure per PostgreSQL tramite identità definite in Microsoft Entra ID. Con l'autenticazione Microsoft Entra è possibile gestire centralmente le identità degli utenti del database e di altri servizi Microsoft semplificando la gestione delle autorizzazioni. Per altre informazioni, vedere Autenticazione Microsoft Entra con Database di Azure per PostgreSQL - Server flessibile.
L'autenticazione PostgreSQL usa gli account archiviati in PostgreSQL. Se si sceglie di usare password come credenziali per gli account, queste credenziali verranno archiviate nella tabella user
. Poiché queste password vengono archiviate in PostgreSQL, è necessario gestire manualmente la rotazione delle password.
Questo articolo presuppone che si abbia familiarità con lo sviluppo con Python, ma non con il server flessibile di Database di Azure per PostgreSQL.
Prerequisiti
- Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
- Istanza del server flessibile di Database di Azure per PostgreSQL. Per creare un'istanza del server flessibile di Database di Azure per PostgreSQL, vedere Creare un'istanza del server flessibile di Database di Azure per PostgreSQL usando il portale di Azure.
- Python 3.8+.
- Versione più recente del programma di installazione del pacchetto pip.
Aggiungere regole del firewall per la workstation client
- Se l'istanza del server flessibile di Database di Azure per PostgreSQL è stata creata con l'opzione per l'accesso privato (integrazione rete virtuale), sarà necessario connettersi al server da una risorsa all'interno della stessa rete virtuale usata dal server. È possibile creare una macchina virtuale e aggiungerla alla rete virtuale creata con l'istanza del server flessibile di Database di Azure per PostgreSQL. Vedere Creare e gestire la rete virtuale del server flessibile di Database di Azure per PostgreSQL tramite l'interfaccia della riga di comando di Azure.
- Se l'istanza del server flessibile di Database di Azure per PostgreSQL è stata creata con l'opzione Accesso pubblico (indirizzi IP consentiti), è possibile aggiungere il proprio indirizzo IP locale all'elenco di regole del firewall nel server. Vedere Creare e gestire le regole del firewall del server flessibile di Database di Azure per PostgreSQL tramite l'interfaccia della riga di comando di Azure.
Configurare l'integrazione di Microsoft Entra nel server (solo senza password)
Se si seguono i passaggi per l'autenticazione senza password, l'autenticazione di Microsoft Entra deve essere configurata per l'istanza del server e l'utente deve essere un amministratore di Microsoft Entra nell'istanza del server. Seguire la procedura descritta in Configurare l'integrazione di Microsoft Entra per assicurarsi che l'autenticazione di Microsoft Entra sia configurata e che l'utente sia assegnato come amministratore di Microsoft Entra nell'istanza del server.
Preparare l'ambiente di sviluppo
Passare a una cartella in cui si vuole eseguire il codice e creare e attivare un ambiente virtuale. Un ambiente virtuale è una directory autonoma per una versione specifica di Python, più gli altri pacchetti necessari per tale applicazione.
Eseguire i comandi seguenti per creare e attivare un ambiente virtuale:
py -3 -m venv .venv
.venv\Scripts\activate
Installare le librerie Python
Installare le librerie Python necessarie per eseguire gli esempi di codice.
Installare la libreria azure-identity , che fornisce il supporto per l'autenticazione token di Microsoft Entra in Azure SDK.
pip install azure-identity
Aggiungere il codice di autenticazione
In questa sezione si aggiunge il codice di autenticazione alla directory di lavoro ed è necessario eseguire eventuali passaggi aggiuntivi necessari per l'autenticazione e l'autorizzazione con l'istanza del server.
Copiare il codice seguente in un editor e salvarlo in un file denominato 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
Recuperare le informazioni di connessione al database SQL.
- Nel portale di Azure cercare il nome del server flessibile di Database di Azure per PostgreSQL e selezionarlo.
- Nella pagina Panoramica del server copiare il nome completo del server. Il valore completo di Nome server è sempre nel formato <my-server-name>.postgres.database.azure.com.
- Nel menu a sinistra, in Sicurezza selezionare Autenticazione. Assicurarsi che l'account sia elencato in Amministratori Microsoft Entra. In caso contrario, completare i passaggi descritti in Configurare l'integrazione di Microsoft Entra nel server (solo senza password).
Impostare le variabili di ambiente per gli elementi dell'URI di connessione:
set DBHOST=<server-name> set DBNAME=<database-name> set DBUSER=<username> set SSLMODE=require
Sostituire i valori segnaposto seguenti nei comandi:
<server-name>
con il valore copiato dal portale di Azure.<username>
con il nome utente di Azure; per esempio,.john@contoso.com
.<database-name>
con il nome del database del server flessibile di Database di Azure per PostgreSQL. Un database predefinito denominato postgres è stato creato automaticamente al momento della creazione del server. È possibile usare tale database o crearne uno nuovo usando i comandi SQL.
Accedere ad Azure nella workstation. È possibile accedere usando l'interfaccia della riga di comando di Azure, Azure PowerShell o Azure Developer CLI. Ad esempio, per accedere tramite l'interfaccia della riga di comando di Azure, immettere questo comando:
az login
Il codice di autenticazione usa
DefaultAzureCredential
per eseguire l'autenticazione con Microsoft Entra ID e ottenere un token che autorizza l'utente a eseguire operazioni sull'istanza del server.DefaultAzureCredential
supporta una catena di tipi di credenziali di autenticazione. Tra le credenziali supportate troviamo le credenziali con cui ci si è connessi agli strumenti di sviluppo, ad esempio l'interfaccia della riga di comando di Azure, Azure PowerShell o Azure Developer CLI.
Come eseguire gli esempi Python
Per ogni esempio di codice in questo articolo, eseguire queste operazioni.
Creare un nuovo file in un editor di testo.
Aggiungere l'esempio di codice al file.
Salvare il file nella cartella del progetto con un'estensione . py, ad esempio postgres-insert.py. Per Windows, verificare che la codifica UTF-8 sia selezionata quando si salva il file.
Nel tipo di cartella del progetto
python
seguito dal nome file, ad esempiopython postgres-insert.py
.
Creare una tabella e inserire i dati
L'esempio di codice seguente stabilisce una connessione al database del server flessibile di Database di Azure per PostgreSQL usando la funzione psycopg.connect
e carica i dati con un'istruzione INSERT di SQL. La funzione cursor.execute
esegue la query SQL sul database.
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()
Quando il codice viene eseguito in modo corretto, genera l'output seguente:
Connection established
Finished dropping table (if existed)
Finished creating table
Inserted 3 rows of data
Leggere i dati
L'esempio di codice seguente stabilisce una connessione al database del server flessibile di Database di Azure per PostgreSQL e usa cursor.execute con l'istruzione SELECT di SQL per leggere i dati. La funzione accetta una query e restituisce un set di risultati su cui eseguire l'iterazione tramite 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()
Quando il codice viene eseguito in modo corretto, genera l'output seguente:
Connection established
Data row = (1, banana, 150)
Data row = (2, orange, 154)
Data row = (3, apple, 100)
Aggiornamento dei dati
L'esempio di codice seguente stabilisce una connessione al database del server flessibile di Database di Azure per PostgreSQL e usa cursor.execute con l'istruzione UPDATE di SQL per aggiornare i dati.
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()
Eliminare dati
L'esempio di codice seguente stabilisce una connessione al database del server flessibile di Database di Azure per PostgreSQL e usa cursor.execute con l'istruzione DELETE di SQL per eliminare una voce di inventario inserita in precedenza.
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()