Articolo originale: How to Use PostgreSQL in Python

Ci sono molti e diversi tipi di database in uso oggi. Abbiamo database centralizzati, database commerciali, database cloud, database distribuiti, database end-user, database NoSQL, database relazionali, e molti altri.

Questo articolo si concentrerà su un esempio di database relazionale (PostgreSQL) e su come richiedere dati da esso. Altri esempi di database relazionali includono MySQL, MariaDB e SQLite.

In questo tutorial, imparerai come installare, connettere e infine eseguire query su un database PostgreSQL con Python.

Per iniziare, partiamo con calma imparando qualcosina in più su PostgreSQL.

Che Cos'è PostgreSQL?

PostgreSQL è uno dei più conosciuti database relazionali open-source. È usato da sviluppatori e aziende di qualsiasi dimensione in tutto il mondo.

Per quanto riguarda la sua popolarità globale, PostgreSQL è stato classificato quarto da DB-Engines, e la sua popolarità è in crescita. Ciò non deve sorprendere, considerando quante applicazioni web e mobile, così come strumenti analitici, usano i database PostgreSQL.

PostgreSQL possiede anche un robusto ecosistema con una grandissima varietà di add-on ed estensioni che funzionano bene con il database principale. Per queste ragioni, PostgreSQL è un'opzione fantastica sia che tu voglia creare una tua soluzione di database personalizzata, sia che tu abbia bisogno di un database commerciale o analitico.

Adesso che sai che c0s'è PostgreSQL, parliamo di come connettersi al database usando Python.

Per Iniziare

Dobbiamo usare una libreria connettore per database per connetterci all'istanza di un database PostgreSQL dal nostro script di Python. Possiamo scegliere da una gamma di alternative in Python, ma Psycopg2 è la più conosciuta e più usata.

Ci sono librerie alternative scritte interamente in Python, come pg8000 e py-postgresql, ma qui useremo Psycopg2.

Che cos'è Psycopg2?

La libreria Psycopg2 usa il linguaggio di programmazione C come wrapper della libreria di PostgreSQL libpq per supportare gli standard di Python DB API 2.0. L'implementazione in C di Psycopg2 la rende incredibilmente veloce ed efficiente.

Usando una query SQL, possiamo utilizzare Psycopg2 per ottenere una o più righe dal database. Con questa libreria, possiamo anche inserire dati all'interno del database usando una varietà di metodi di inserimento, singoli o di gruppo.

La libreria è come SQL (Structured Query Language) e compie tutti i lavori e le operazioni che un linguaggio di query può fare. Gestisce sia Unicode che Python3, e include la thread safety (la stessa connessione è condivisa da molteplici thread).

È fatta per eseguire programmi altamente multi-thread, che producono e cancellano frequentemente molti cursori e compiono molti INSERT and UPDATE simultaneamente. Le funzionalità di Psycopg2 includono cursori dal lato client e dal lato server, comunicazione asincrona, e notifiche.

Come Installare Psycopg2

Dobbiamo prima installare Pyscopg2 per poterlo usare. Possiamo installarlo dal terminale o dal prompt dei comandi usando pip.

#installazione

pip install psycopg2
pip3 install psycopg2

Se decidi di installare anche la libreria connettore in un ambiente virtuale, puoi farlo usando questo codice:

virtualenv env && source env/bin/activate
pip install psycopg2-binary

La libreria Psycopg2 e tutte le sue dipendenze verranno installate nel nostro ambiente virtuale di Python con queste righe di codice.

Abbiamo installato il nostro connettore, quindi iniziamo a scrivere alcune query.

Come Interrogare PostgreSQL usando Python

Prima di tutto, dovrai creare un nuovo file e chiamarlo come preferisci. Poi aprilo nel tuo IDE e inizia a scrivere il codice.

La prima cosa da fare è importare la libreria (questo è molto importante). Useremo due oggetti di Pyscogp2:

  • Oggetto connessione: la connessione a un'istanza di un database PostgreSQL è gestita da un oggetto connessione. Incapsula la sessione di un database, creata usando la funzione connect().
  • Oggetto cursore: l'oggetto cursore rende possibile l'esecuzione dei comandi PostgreSQL per gli script di Python durante la sessione di un database. La connessione genera dei cursori, dopodiché il metodo cursor() li lega permanentemente alla connessione. Tutti i comandi sono effettuati all'interno della struttura della sessione del database racchiusa nella connessione.
import psycopg2

conn = psycopg2.connect(database="db_name",
                        host="db_host",
                        user="db_user",
                        password="db_pass",
                        port="db_port")

Dobbiamo specificare questi argomenti per poterci connettere al database. Diamo una veloce occhiata a questi argomenti.

  • database: il nome del database a cui vogliamo avere accesso o connetterci. Nota che possiamo connetterci a un solo database con un oggetto connessione.
  • host: molto probabilmente questo fa riferimento all'indirizzo IP o all'URL del server del database.
  • user: come suggerisce il nome, si riferisce al nome dell'utente PostgreSQL.
  • password: questa è la password associata all'utente PostgreSQL.
  • port: il numero della porta del server PostgreSQL sul localhost - di solito è 5432.

Se le credenziali del nostro database sono state inserite correttamente, riceveremo un oggetto connessione al database in tempo reale che possiamo usare per costruire un oggetto cursore. Possiamo proseguire ed eseguire qualsiasi query sul database e recuperare dati con l'aiuto del nostro oggetto cursore.

cursor = conn.cursor()
oggetto cursore

Scriviamo una semplice query:

cursor.execute("SELECT * FROM DB_table WHERE id = 1")

Usiamo la funzione execute() e forniamo come parametro una stringa di query. Poi il database sarà interrogato usando la query che abbiamo inserito.

Una volta che avremo compiuto questa azione con successo, per poter recuperare dati dal database usando Pyscopg2, dobbiamo usare una di queste funzioni: fetchone(), fetchall() o fetchmany().

Come usare fetchone():

Dopo aver eseguito la query SQL, questa funzione restituirà soltanto la prima riga. È il metodo più semplice per prendere dati da un database.

#code
print(cursor.fetchone())

#output
(1, 'A-CLASS', '2018', 'Subcompact executive hatchback')
esempio di fetchone()

La funzione fetchone() restituisce una singola riga in forma di tupla, con le informazioni organizzate nell'ordine specificato dalle colonne fornite nella query.

Quando strutturiamo la stringa di query, è cruciale fornire l'ordine delle colonne in modo preciso per poter distinguere quali dati nella tupla corrispondono a quali colonne.

Come usare fetchall():

La funzione fetchall() funziona allo stesso modo di fetchone() ad eccezione del fatto che non restituisce una riga sola ma tutte le righe. Quindi, in caso volessimo 20-200 righe o più, possiamo fare uso di fetchall().

#code
print(cursor.fetchall())

#output
[(1, 'A-CLASS', '2018', 'Subcompact executive hatchback'),
 (2, 'C-CLASS', '2021', 'D-segment/compact executive sedan'),
 (3, 'CLA', '2019', 'Subcompact executive fastback sedan'),
 (4, 'CLS', '2018', 'E-segment/executive fastback sedan'),
 (5, 'E-CLASS', '2017', 'E-segment/executive sedan'),
 (6, 'EQE', '2022', 'All-electric E-segment fastback'),
 (7, 'EQS', '2021', 'All-electric full-size luxury liftback'),
 (8, 'S-CLASS', '2020', 'F-segment/full-size luxury sedan.'),
 (9, 'G-CLASS', '2018', 'Mid-size luxury SUV, known as the G-Wagen'),
 (10, 'GLE', '2019', 'Mid-size luxury crossover SUV')]
[...]
esempio di fetchall()

Come usare fetchmany():

La funzione fetchmany() ci permette di ottenere un certo numero di voci dal database e ci dà maggiore controllo sul numero preciso di righe che otteniamo.

#code
print(cursor.fetchmany(size=3))

#output
[(1, 'A-CLASS', '2018', 'Subcompact executive hatchback'),
 (2, 'C-CLASS', '2021', 'D-segment/compact executive sedan'),
 (3, 'CLA', '2019', 'Subcompact executive fastback sedan')]
esempio di fetchmany()

Poiché abbiamo impostato 3 come argomento, riceviamo solamente tre righe.

Quando abbiamo finito di interrogare il nostro database dobbiamo chiudere la connessione con conn.close().

Conclusione

È stato piuttosto semplice, vero? Siamo stati in grado di eseguire tutte queste operazioni da un singolo script Python e ha funzionato molto bene.

Spero che questo articolo ti sia stato utile, adesso puoi lavorare con PostgreSQL usando Python,

Per maggiori informazioni, dai un'occhiata alla documentazione di Psycopg2.