Eventi
Ottieni gratuitamente la certificazione in Microsoft Fabric.
19 nov, 23 - 10 dic, 23
Per un periodo di tempo limitato, il team della community di Microsoft Fabric offre buoni per esami DP-600 gratuiti.
Prepara oraQuesto browser non è più supportato.
Esegui l'aggiornamento a Microsoft Edge per sfruttare i vantaggi di funzionalità più recenti, aggiornamenti della sicurezza e supporto tecnico.
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.
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.
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 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
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.
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.
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 esempio python postgres-insert.py
.
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
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)
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()
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()
Eventi
Ottieni gratuitamente la certificazione in Microsoft Fabric.
19 nov, 23 - 10 dic, 23
Per un periodo di tempo limitato, il team della community di Microsoft Fabric offre buoni per esami DP-600 gratuiti.
Prepara ora