跳到主要內容
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 切換嚴格模式

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