Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Query cross-database in SQLite

Una delle caratteristiche meno conosciute di SQLite è la possibilità di effettuare query cross-database: scopriamo come.
Query cross-database in SQLite
Una delle caratteristiche meno conosciute di SQLite è la possibilità di effettuare query cross-database: scopriamo come.
Link copiato negli appunti

I database SQLite sono uno dei pochi esempi di database embedded, quelli cioè in cui l'intera base di dati è condensata in un unico file. Nonostante non si tratti della tecnologia più efficiente per la gestione di database relazionali, SQLite deve anche a questa caratteristica il suo successo, che ne vede larga applicazione nei contesti più vari (uno su tutti, l'integrazione con le app Android).

Ci sono però altre caratteristiche rendono SQLite particolarmente interessante. Tra queste, ce n'è una poco conosciuta, ma al tempo stesso potenzialmente molto utile: la possibilità di effettuare query cross-database. In altre parole, con SQLite è possibile, entro un'unica query SQL, interrogare tabelle distribuite su più di database, ed eventualmente metterle insieme con tutte le tipiche operazioni relazionali (JOIN incluso).

Come realizzare query cross-database in SQLite

Per poter effettuare query cross-database in SQLite, abbiamo bisogno di utilizzare la parola chiave ATTACH:

ATTACH 'other.db' AS other

Abbiamo specificato il nome del database (other), seguito da un punto (.) e dal nome dello schema (db). Con il parametro AS abbiamo poi assegnato un nome a questo database esterno, di cui potremo quindi interrogare le tabelle.

Interfaccia Python per query cross-database

Recentemente, la libreria sqlite-utils è stata aggiornata includendo una nuova funzionalità che permette proprio l'uso del costrutto ATTACH per l'interazione con più database. Tale funzionalità si ripercuote sia nel tool a riga di comando fornito con sqlite-utils, sia nel modulo Python che permette l'interfacciamento con questo tipo di databse. Il codice seguente mostra un esempio:

db = Database("first.db")
db.attach("second", "second.db")
 
cursor = db.execute("""
select * from table_in_first
    union all
select * from second.table_in_second
""")
print(cursor.fetchall())

Chi fosse interessato a conoscere qualche dettaglio in più, soprattutto relativo al tool da riga di comando, può fare riferimento a questa pagina della documentazione ufficiale di sqlite-utils.

Ti consigliamo anche