跳到主要內容
AI News HubLIVE
站內改寫1 分鐘閱讀

sqlite-utils 4.1 發佈

文章摘要

sqlite-utils 4.1 是 4.0 之後的第一個小版本,引入了多項新功能,包括通過 --code 選項允許用户在 insert 和 upsert 命令中直接嵌入 Python 代碼生成行數據,以及通過 --type 選項覆蓋列類型,支持對 CSV 或 TSV 中的郵政編碼等字段強制存儲為文本。此外,新增了 drop-index 命令和從標準輸入讀取查詢的功能。還添加了在 transform 中切換 STRICT 模式的能力。

sqlite-utils 4.1 發佈
報告錯誤

更正渠道尚未開通,可先複製下方文章資訊留存。

查看更正說明
直接讀正文

sqlite-utils 4.1 是自 4.0 發佈幾天後的第一個小版本更新,帶來了多項實用的新功能。其中最引人注目的是 insert 和 upsert 命令新增的 --code 選項,允許用户直接在命令行中嵌入 Python 代碼塊(或指定 .py 文件路徑),定義 rows() 函數或 rows 可迭代對象來生成待插入的數據行,無需再依賴文件導入。這一功能擴展了 sqlite-utils 已有的內嵌 Python 代碼模式,例如先前在 convert 命令中使用的代碼塊。

另一個實用的新增是 --type 選項,用於在通過 insert 或 upsert 創建表時覆蓋自動推斷的列類型。這對於 CSV 或 TSV 中的 ZIP 碼之類的列特別有用,它們看起來像整數,但為了保留前導零必須存儲為 TEXT 類型。這是一個長期存在的功能請求,實現卻相當簡單。

在索引管理方面,新增了 table.drop_index(name) 方法和對應的 sqlite-utils drop-index 命令,用於按名稱刪除索引,同時支持 ignore=True/--ignore 選項忽略不存在的索引。此外,sqlite-utils query 命令現在可以通過傳遞 - 代替查詢字符串來從標準輸入讀取 SQL,例如 echo "select * from dogs" | sqlite-utils query dogs.db -。

對於 upsert 操作,現在可以自動推斷已有表的主鍵,因此在向已設置主鍵的表執行 upsert 時無需再指定 --pk,這是一個由 Codex 提示的簡化改進。

最值得關注的新特性是 table.transform() 和 table.transform_sql() 方法現在接受 strict=True 或 strict=False 參數,用於切換表的 SQLite STRICT 模式。如果省略該參數,則保持現有模式。相應的,sqlite-utils transform 命令也新增了 --strict 和 --no-strict 選項。這一功能的靈感來源於 Evan Hahn 的《Prefer STRICT tables in SQLite》一文,文中指出無法通過 ALTER TABLE 直接更改嚴格模式,而 sqlite-utils 的 transform 機制正是通過複製數據到新表來實現此類變更,因此很容易擴展以支持嚴格模式切換。作者使用 GPT-5.6 Sol xhigh Codex 實現了該功能,並特別通過手動測試發現了兩個小問題並修復。

展開要點與分析

文章情報

工程師進階

要點

  • 引入 --code 選項,允許通過 Python 代碼生成行數據進行插入或更新
  • 新增 --type 選項,用於在創建表時覆蓋列類型
  • 添加 drop-index 命令和從標準輸入讀取查詢的功能
  • table.transform() 支持 strict=True/False 切換嚴格模式

要點與分析由自動化流程生成,可能有誤,請結合原始來源核實。