Salta al contenuto principale

Eseguire query con Python su PostgreSQL

Profile picture for user luca77king

Python è un linguaggio di programmazione molto utile per manipolare database, e PostgreSQL è uno dei database più utilizzati al mondo. In questo articolo, vedremo come eseguire query su PostgreSQL utilizzando Python e come gestire gli errori. Utilizzeremo anche la libreria psycopg2 per comunicare con il database PostgreSQL.

Installazione di psycopg2

Psycopg2 è un pacchetto Python che fornisce un'interfaccia per interagire con il database PostgreSQL. Consente di connettersi a un database PostgreSQL e di eseguire query su di esso, oltre a fornire funzionalità per la gestione della transazione e la manipolazione dei dati.

Per installare psycopg2, è possibile utilizzare pip, il gestore dei pacchetti di Python, aprendo il terminale o la riga di comando e digitando il comando:

pip install psycopg2

Questo comando scaricherà ed installerà il pacchetto psycopg2 e le sue dipendenze, permettendoti di utilizzare le funzionalità di PostgreSQL all'interno di Python.

Connessione al database

Una volta installato, possiamo connetterci al database PostgreSQL utilizzando il seguente codice:

import psycopg2

try:
    conn = psycopg2.connect(
        host="localhost",
        port="5432",  # sostituisci con la porta corretta
        database="nomedatabase",
        user="username",
        password="password"
    )
except psycopg2.Error as e:
    print(f"Errore durante la connessione al database: {e}")

Dove localhost indica l'host del database, nomedatabase è il nome del database, username e password sono le credenziali di accesso. In caso di errore durante la connessione, verrà stampato un messaggio di errore.

Esecuzione di una query

Dopo aver stabilito la connessione al database PostgreSQL, possiamo eseguire query per recuperare i dati dal database utilizzando il modulo psycopg2.

Per eseguire una query, creiamo un cursore utilizzando il metodo cursor() dell'oggetto connessione:

cur = conn.cursor()

Successivamente, possiamo eseguire la query utilizzando il metodo execute() del cursore. Ad esempio, se vogliamo selezionare tutti i dati dalla tabella "utenti", possiamo utilizzare il seguente codice:

cur.execute("SELECT * FROM users")

Dopo aver eseguito la query, possiamo recuperare i dati utilizzando il metodo fetchall() del cursore. Questo metodo restituisce una lista di tuple contenenti i risultati della query.

risultati = cur.fetchall()

I risultati della query sono in formato di tuple senza nomi di colonne. Possiamo convertire ogni tupla in un dizionario, assegnando i nomi di colonna ai valori corrispondenti, utilizzando il seguente codice:

descrizione_colonne = [desc[0] for desc in cur.description]
risultati_sanificati = []
for record in risultati:
    risultati_sanificati.append(dict(zip(descrizione_colonne, record)))

In questo modo, la variabile risultati_sanificati contiene i risultati della query come una lista di dizionari, dove ogni dizionario rappresenta un record della tabella "utenti".

Per visualizzare i dati, possiamo utilizzare il metodo print() come segue:

for utente in risultati_sanificati:
    print(utente)

Utilizzo di RealDictCursor

Dopo aver creato la connessione, possiamo anche creare un cursore utilizzando la classe RealDictCursor di psycopg2, che ci permette di ottenere i risultati della query come dizionari invece di tuple. Questo è particolarmente utile perché ci permette di accedere ai valori dei campi attraverso le loro chiavi invece di utilizzare l'indice numerico.

Ecco un esempio di codice che utilizza RealDictCursor:

cur = conn.cursor(cursor_factory=RealDictCursor)

cur.execute("SELECT * FROM users")
risultati = cur.fetchall()
for row in risultati:
    print(row['id'], row['name'], row['email'])

In questo esempio, stiamo creando un cursore utilizzando la classe RealDictCursor di psycopg2. Successivamente, stiamo eseguendo una query per selezionare tutti i dati dalla tabella tabella utilizzando il metodo execute del cursore. Infine, stiamo ottenendo i risultati della query come dizionari utilizzando il metodo fetchall del cursore.

Dopo aver ottenuto i risultati, possiamo accedere ai valori dei campi utilizzando le loro chiavi. Nel nostro caso, stiamo stampando l'id, il nome e l'email di ciascuna riga della tabella.

Chiusura della connessione

È importante chiudere la connessione al database utilizzando il seguente codice:

if conn:
    conn.close()

In questo modo, stiamo chiudendo la connessione al database e rilasciando le risorse utilizzate.