Guida introduttiva: Usare Python per connettersi ed eseguire query sui dati in Database di Azure per PostgreSQL - Server flessibile
SI APPLICA A: Database di Azure per PostgreSQL - Server flessibile
In questa guida introduttiva ci si connette a un'istanza del server flessibile Database di Azure per PostgreSQL usando Python. È quindi possibile usare istruzioni SQL per eseguire query, inserire, aggiornare ed eliminare dati nel database dalle piattaforme Mac, Ubuntu Linux e Windows.
Questo articolo presuppone che si abbia familiarità con lo sviluppo con Python, ma non si ha familiarità con Database di Azure per PostgreSQL server flessibile.
Prerequisiti
- Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
- Istanza del server flessibile Database di Azure per PostgreSQL. Per creare Database di Azure per PostgreSQL'istanza del server flessibile, vedere Creare un'istanza del server flessibile Database di Azure per PostgreSQL usando portale di Azure.
- Python 2.7 o 3.6+.
- Versione più recente del programma di installazione del pacchetto pip.
Preparazione della workstation client
- Se è stata creata l'istanza del server flessibile Database di Azure per PostgreSQL con accesso privato (integrazione rete virtuale), sarà necessario connettersi al server da una risorsa all'interno della stessa rete virtuale del server. È possibile creare una macchina virtuale e aggiungerla alla rete virtuale creata con l'istanza del server flessibile 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 è stata creata l'istanza del server flessibile Database di Azure per PostgreSQL con accesso pubblico (indirizzi IP consentiti), è possibile aggiungere l'indirizzo IP locale all'elenco delle 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.
Installare le librerie di Python per PostgreSQL
Il modulo psycopg2 consente la connessione e l'esecuzione di query su un database PostgreSQL ed è disponibile come pacchetto wheel di Linux, macOS o Windows. Installare la versione binaria del modulo, incluse tutte le dipendenze.
Per installare psycopg2
, aprire un terminale o un prompt dei comandi ed eseguire il comando pip install psycopg2
.
Recuperare le informazioni di connessione al database SQL
Connessione a un'istanza del server flessibile Database di Azure per PostgreSQL richiede il nome completo del server e le credenziali di accesso. È possibile ottenere queste informazioni nel portale di Azure.
Nella portale di Azure cercare e selezionare il nome del server flessibile Database di Azure per PostgreSQL.
Nella pagina Panoramica del server, copiare il valore dei campi Nome server (completo) e Nome utente amministratore. Il nome completo del server è sempre nel formato< my-server-name.postgres.database.azure.com>.
È necessaria anche la password dell'amministratore. Se la password è stata dimenticata, è possibile reimpostarla nella pagina di panoramica.
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. Nel codice sostituire:
<server-name>
e<admin-username>
con i valori copiati dal portale di Azure.<admin-password>
con la password del server.<database-name>
con il nome del database del server flessibile Database di Azure per PostgreSQL. Un database predefinito denominato postgres è stato creato automaticamente al momento della creazione del server. È possibile rinominare questo database o crearne uno nuovo usando i comandi di SQL.
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.
Per eseguire il file, passare alla cartella del progetto in un'interfaccia della riga di comando e digitare
python
seguito dal nome file, ad esempiopython postgres-insert.py
.
Creare una tabella e inserire i dati
L'esempio di codice seguente si connette al database del server flessibile Database di Azure per PostgreSQL usando la funzione psycopg2.connect e carica i dati con un'istruzione SQL IN edizione Standard RT. La funzione cursor.execute esegue la query SL sul database.
import psycopg2
# Update connection string information
host = "<server-name>"
dbname = "<database-name>"
user = "<admin-username>"
password = "<admin-password>"
sslmode = "require"
# Construct connection string
conn_string = "host={0} user={1} dbname={2} password={3} sslmode={4}".format(host, user, dbname, password, sslmode)
conn = psycopg2.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:
Leggere i dati
L'esempio di codice seguente si connette al database del server flessibile Database di Azure per PostgreSQL e usa cursor.execute con l'istruzione SQL edizione Standard LECT per leggere i dati. Questa funzione accetta una query e restituisce un set di risultati su cui eseguire l'iterazione usando cursor.fetchall()
import psycopg2
# Update connection string information
host = "<server-name>"
dbname = "<database-name>"
user = "<admin-username>"
password = "<admin-password>"
sslmode = "require"
# Construct connection string
conn_string = "host={0} user={1} dbname={2} password={3} sslmode={4}".format(host, user, dbname, password, sslmode)
conn = psycopg2.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()
Aggiornamento dei dati
L'esempio di codice seguente si connette al database del server flessibile Database di Azure per PostgreSQL e usa cursor.execute con l'istruzione SQL UPDATE per aggiornare i dati.
import psycopg2
# Update connection string information
host = "<server-name>"
dbname = "<database-name>"
user = "<admin-username>"
password = "<admin-password>"
sslmode = "require"
# Construct connection string
conn_string = "host={0} user={1} dbname={2} password={3} sslmode={4}".format(host, user, dbname, password, sslmode)
conn = psycopg2.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 si connette al database del server flessibile Database di Azure per PostgreSQL e usa cursor.execute con l'istruzione SQL DELETE per eliminare un elemento di inventario inserito in precedenza.
import psycopg2
# Update connection string information
host = "<server-name>"
dbname = "<database-name>"
user = "<admin-username>"
password = "<admin-password>"
sslmode = "require"
# Construct connection string
conn_string = "host={0} user={1} dbname={2} password={3} sslmode={4}".format(host, user, dbname, password, sslmode)
conn = psycopg2.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()