Sabato 24 ottobre 2026
L’edizione di oggi
Millebit
AI · Software · QA
Il segnale, non il rumore.

Gli articoli di Millebit sono scritti con l’intelligenza artificiale a partire da fonti citate in ogni pezzo. Come lavoriamo

Sviluppo software

sqlite-utils 4.1.1 blocca transform() in transazioni con foreign keys

Testo scritto con l’intelligenza artificiale a partire da una fonte citata, senza revisione umana prima della pubblicazione.

table.transform() solleva TransactionError se chiamato dentro una transazione con PRAGMA foreign_keys abilitato e la tabella è referenziata da ON DELETE CASCADE/SET NULL/SET DEFAULT; la documentazione CLI e API Python ora si rimandano a vicenda.

Sviluppi Ne abbiamo scritto di nuovo il 14 ago: sqlite-utils 4.2 migliora gli alter table complessi e conserva i vincoli

Illustrazione generata con l’intelligenza artificiale

Il 12 luglio 2026 sqlite-utils 4.1.1 cambia table.transform(): se la chiami dentro una transazione con PRAGMA foreign_keys attivo e la tabella ha riferimenti ON DELETE CASCADE, SET NULL o SET DEFAULT, la libreria solleva una TransactionError1.

Il caso è unico e definito: transazione aperta, foreign keys abilitate, tabella referenziata con una delle tre azioni ON DELETE. In quello scenario transform() non procede e alza l’eccezione. La nota di rilascio collega la scelta all’issue #7941.

Il motivo è in SQLite. Dentro una transazione non puoi cambiare PRAGMA foreign_keys1. Il percorso interno di transform() ricrea la tabella e rimuove quella precedente. Quel drop può attivare ON DELETE e toccare righe referenziate. Prima, questo accadeva senza un segnale chiaro per l’utente. Ora la libreria interrompe l’operazione e rende esplicito il rischio con TransactionError1.

La release elenca in modo puntuale le tre azioni ON DELETE interessate: CASCADE, SET NULL, SET DEFAULT. Non cita altre azioni né altri casi. La modifica non riguarda operazioni fuori da una transazione o con PRAGMA foreign_keys disabilitato. Non riguarda tabelle senza riferimenti esterni. La logica resta circoscritta al perimetro indicato1.

L’issue #794 documenta il problema e guida la decisione. Nella discussione compaiono test che riproducono l’errore in quella combinazione di condizioni e confermano la nuova eccezione TransactionError1.

La pagina di rilascio indica dove trovare dettagli e soluzioni alternative. Rimanda alla sezione “Foreign keys and transactions”, che spiega le interazioni tra transazioni, PRAGMA foreign_keys e azioni ON DELETE, e descrive un workaround per chi deve trasformare schemi in presenza di vincoli di chiave esterna1.

Oltre a questo cambio di comportamento, 4.1.1 aggiorna la documentazione. Le pagine della CLI ora linkano alla funzionalità equivalente nella Python API, e le pagine della Python API rimandano al comando CLI corrispondente. La nota collega l’intervento all’issue #7911.

Per gli utenti, l’impatto è pratico: il tentativo di trasformare una tabella referenziata in una transazione con foreign keys attive fallirà subito, invece di produrre effetti collaterali silenziosi. Chi incappa in TransactionError trova nella sezione “Foreign keys and transactions” il percorso consigliato per procedere in sicurezza, con i limiti e i passaggi spiegati nella documentazione ufficiale1.

Fonti

  1. sqlite-utils 4.1.1 Simon Willison · 12 luglio 2026
Come è nato questo articolo Scritto da un sistema di intelligenza artificiale, con controlli automatici

Millebit non ha giornalisti che scrivono gli articoli: li scrive un motore editoriale basato su modelli di intelligenza artificiale, a partire dalle fonti elencate qui sopra. Prima di uscire, ogni testo passa questi controlli:

  • Fedeltà alle fonti. Un secondo passaggio toglie ogni affermazione che le fonti non sostengono.
  • Anti-cliché. Un filtro scarta frasi fatte, enfasi e tic della prosa artificiale.
  • Giudizio editoriale. Un modello valuta il pezzo su sette criteri (apertura, chiarezza, economia, concretezza, voce, struttura, fedeltà) e sotto 7,8/10 non si pubblica.

I controlli riducono gli errori ma non li eliminano: un modello può fraintendere una fonte. Per le decisioni importanti, risali alla fonte originale. Se trovi un errore, segnalacelo.

Come funziona Millebit, nel dettaglio →

Il filo della storia

  1. Questo articolo
  2. sqlite-utils 4.2 migliora gli alter table complessi e conserva i vincoli
Hai trovato un errore? Segnalacelo
Tipo di segnalazione

Leggiamo ogni segnalazione. Le correzioni fatte sono elencate in Correzioni. L’email, se la lasci, serve solo a risponderti.