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

sqlite-utils 4.0: arrivano le migrations dello schema

Simon Willison rilascia sqlite-utils 4.0: migrations dello schema, transazioni annidate e compound foreign key, con alcuni breaking change. Utile a chi costruisce tool basati su SQLite.

Simon Willison ha rilasciato sqlite-utils 4.0, la 124esima release del progetto e il primo salto di major version dopo la 3.0 del novembre 2020. Il pacchetto Python per lavorare con database SQLite dalla riga di comando introduce tre funzionalità che interessano chi costruisce tool basati su SQLite: le migrations dello schema, le transazioni annidate e il supporto per le compound foreign key.

Migrations senza ORM

La novità principale sono le migrations: una sequenza ordinata di modifiche allo schema, con un meccanismo che tiene traccia di quali sono già state applicate. Le migrations si definiscono in file Python e si appoggiano al metodo table.transform(), che ricostruisce la tabella (crea una tabella temporanea con il nuovo schema, copia i dati, elimina la vecchia e rinomina) per aggirare i limiti dell’ALTER TABLE di SQLite. Una tabella _sqlite_migrations registra nome e timestamp di ogni migration applicata. A differenza di Django, da cui Willison dichiara di prendere ispirazione, l’approccio è volutamente più scarno: niente generazione automatica delle migrations dai modelli e niente rollback. Il motivo dichiarato è pragmatico: il rollback si usa raramente e con SQLite basta copiare il file del database prima di applicare le modifiche.

Il disegno non è nuovo: era già disponibile nel pacchetto separato sqlite-migrate, rimasto a lungo in beta. Ora viene promosso dentro sqlite-utils e reso disponibile a tutto l’ecosistema Datasette/LLM. I progetti che dipendono da sqlite-migrate continuano a funzionare senza modifiche.

Il resto della release

Le transazioni annidate arrivano con il context manager db.atomic(), che sfrutta i savepoint di SQLite e può essere annidato. Cambiano anche gli upsert (ora usano INSERT ... ON CONFLICT), il metodo db.query() ora esegue subito e rifiuta le query che non restituiscono righe (si usa db.execute() per scritture e DDL), e l’import di CSV/TSV rileva i tipi delle colonne di default. Sono breaking change, da qui il numero di major version.

Nota interessante sul metodo di lavoro: Willison racconta di aver usato modelli come Claude Fable 5 per una review pre-release. A fronte di uno stesso prompt di verifica, un modello ha prodotto 5 script senza trovare molto, un altro 12 script individuando 4 release blocker e 10 problemi aggiuntivi. È un aneddoto, non un benchmark, ma dice qualcosa su come sta cambiando la manutenzione dei progetti open source.

In sintesi

  • sqlite-utils 4.0 porta migrations, transazioni annidate e compound foreign key, con alcuni breaking change.
  • Le migrations sono deliberatamente minimali: niente autogenerazione né rollback.
  • Utile soprattutto a chi costruisce tool che gestiscono il proprio schema SQLite nel tempo.

Fonte: sqlite-utils 4.0, now with database schema migrations

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