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
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
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.
Il filo della storia
Per vedere Millebit nelle notizie principali di Google, aggiungilo alle tue fonti preferite. Oppure segui l’edizione di oggi, il feed RSS o La Sintesi.