Simon Willison ha rilasciato sqlite-utils 4.1, la prima dot-release dopo la 4.0 uscita pochi giorni prima. Non ci sono stravolgimenti: e’ un insieme di piccole feature che rendono piu’ comodo l’uso quotidiano della utility CLI e libreria Python per manipolare database SQLite. Per chi lavora con i dati, sono proprio i dettagli che tolgono attrito nelle pipeline di ingestione e nelle manutenzioni ricorrenti.
Cosa introduce la 4.1
La novita’ piu’ evidente e’ l’opzione --code per insert e upsert: permette di passare un blocco di codice Python (o il path a un file .py) che definisce una funzione rows() o un iterabile rows, come alternativa all’importazione da file. E’ l’estensione naturale di un pattern gia’ presente in sqlite-utils, dove blocchi di codice si potevano passare come argomenti CLI, per esempio nel comando convert.
Altre aggiunte utili: --type nome-colonna tipo permette di forzare il tipo scelto automaticamente alla creazione della tabella, comodo per colonne CSV o TSV come i CAP che sembrano interi ma vanno tenuti come TEXT per preservare gli zeri iniziali. Arrivano poi il metodo table.drop_index(name) e il comando drop-index (con ignore per un indice mancante), la possibilita’ per query di leggere la SQL da standard input passando -, e per upsert di inferire la primary key di una tabella esistente, cosi’ da poter omettere --pk.
Cambiare lo strict mode delle tabelle
La parte piu’ interessante riguarda lo strict mode di SQLite. Ora table.transform() e table.transform_sql() accettano strict=True o strict=False, e il comando transform accetta --strict e --no-strict; omettere l’opzione preserva la modalita’ esistente. La feature nasce da un articolo di Evan Hahn sul preferire le tabelle STRICT: Hahn notava che non esiste un modo per fare ALTER di una tabella e renderla strict, perche’ bisogna copiare i dati dalla tabella non-strict a quella strict. Ed e’ esattamente cio’ che fa il meccanismo transform di sqlite-utils, che Willison ha esteso per passare da strict a non-strict e viceversa.
Vale una nota sul metodo di lavoro: diverse di queste aggiunte sono state suggerite facendo revisionare a Codex (con GPT-5.6 Sol) le issue aperte per evidenziare le piu’ semplici da implementare. Uno dei prompt piu’ utili chiedeva al modello di testare manualmente il proprio lavoro oltre ai test automatici gia’ scritti, il che ha fatto emergere due problemi minori poi corretti.
- L’opzione
--codeporta la generazione di righe via Python direttamente ininserteupsert. - Override dei tipi, drop-index e lettura della query da stdin riducono l’attrito nelle operazioni quotidiane.
- Il transform ora converte tabelle tra strict e non-strict, colmando un limite di SQLite sull’ALTER.
Fonte: Release: sqlite-utils 4.1 — https://simonwillison.net/2026/Jul/11/sqlite-utils/
Hai qualcosa da aggiungere? Unisciti alla discussione.