// data & ai · giornale tecnico MILANO ● LIVE 00:00:00

sqlite-utils 4.0: migrazioni di schema, transazioni annidate e compound foreign key

La prima major release di sqlite-utils dal 2020 introduce le schema migration, le transazioni annidate con db.atomic() e il supporto alle compound foreign key, insieme ad alcune breaking change.

Simon Willison ha rilasciato sqlite-utils 4.0, la 124esima release del progetto e il primo salto di major version dalla 3.0 di novembre 2020. sqlite-utils è una utility CLI e una libreria Python per manipolare database SQLite, molto usata nell’ecosistema Datasette e LLM dello stesso autore. Oltre ad alcune breaking change minori (che giustificano il cambio di major), la versione porta tre funzionalità principali: le database migration, le transazioni annidate tramite il nuovo metodo db.atomic() e il supporto alle compound foreign key.

Migrazioni di schema

Le migration definiscono una sequenza di modifiche da applicare a un database SQLite, insieme a un meccanismo per tenere traccia di quali sono già state applicate. Si scrivono in file Python e sfruttano il metodo table.transform(), che offre capacità di alter table più avanzate di quelle native di SQLite seguendo il pattern raccomandato dalla documentazione ufficiale: creare una tabella temporanea con il nuovo schema, copiare i dati, eliminare la vecchia e rinominare. Una tabella _sqlite_migrations registra le migration eseguite. Il comando sqlite-utils migrate le applica, e senza un file specifico effettua lo scan della directory corrente cercando file migrations.py.

Il design non è nuovo: nasce dal pacchetto separato sqlite-migrate, rimasto in beta per tre anni e ora promosso a feature integrata. Rispetto alle Migrations di Django, l’approccio è deliberatamente più semplice: niente generazione automatica dal modello (sqlite-utils incoraggia la creazione programmatica delle tabelle) e niente rollback, che secondo l’autore è raramente usato e in SQLite si ottiene copiando il file del database prima di applicare le migration.

Transazioni, foreign key e breaking change

Il context manager db.atomic() introduce le transazioni annidate sfruttando i savepoint di SQLite, rendendo il sistema di migration più sicuro. Le compound foreign key sono supportate in creazione, trasformazione e introspezione. Tra le breaking change: gli upsert usano ora la sintassi INSERT ... ON CONFLICT ... DO UPDATE SET, db.query() esegue subito e rifiuta gli statement che non restituiscono righe (per le scritture e il DDL va usato db.execute()), e gli import CSV/TSV rilevano i tipi di colonna per default.

  • Prima major release dal 2020, con guida ufficiale all’upgrade da 3.x a 4.0.
  • I progetti che dipendono da sqlite-migrate continuano a funzionare senza modifiche.
  • L’autore documenta un uso estensivo di modelli frontier per rivedere il codice e scrivere release notes e upgrade guide, poi verificate manualmente.

Fonte: Release: sqlite-utils 4.0 — https://simonwillison.net/2026/Jul/7/sqlite-utils/

Condividi X Facebook LinkedIn WhatsApp Email

// scritto da

Fernando

Hai qualcosa da aggiungere? Unisciti alla discussione.

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Altri dell'autore

dalla stessa firma