開會要借投影機,還在翻整張表?用 Datasette 查器材清單
重點摘要
- 自製120筆器材清單以台南、投影機、可借三條件篩選,找到5筆。
- 相同條件匯出CSV為5筆,逐欄與JSON查詢結果核對一致。
- 查詢不存在的維修中組合回傳0筆。
- 本次中文資料表網址在重新導向後遇到404,改用英文表名gear後查詢成功,中文欄位與內容保留。
- 結論: 本次示範清單能篩選及匯出一致的5筆器材資料。
- 適合: 願意先完成命令列設定,之後以網頁反覆查詢同一份清單的人。
- 不適合: 期待開啟即用的桌面試算表,或未經設定就能預約及同步器材狀態的人。
| 實測項目 | 結果 |
|---|---|
| 原始器材 | 120筆 |
| 三條件篩選 | 5筆 |
| CSV匯出 | 5筆,逐欄與編號一致 |
| 不存在的維修中組合 | 0筆 |
| 受測Python | 3.12 |
| sqlite-utils | 4.2.1 |
下午要開會,先得找到一台能用的投影機。器材表裡混著相機、麥克風和筆電,看見「可借」還不夠,還要確認是不是放在台南。這種同時查地點、種類與狀態的工作,清單一長,就容易來回翻。Datasette 的用途,是把資料庫變成可在瀏覽器查詢的頁面;這次用自製器材資料,看看條件篩選與匯出是否對得上。
這不是實際公司的庫存,也沒有真實員工或借用紀錄。測試設備為 Mac mini M4 Pro(12 核、64GB),受測 Python 3.12、Datasette 1.0a41、sqlite-utils 4.2.1。1.0a41 是開發版,以下固定受測提交,不把其他版本的行為當成已驗證。
先把清單準備好
安裝與最初的資料轉換需要使用命令列。日後查資料才是在網頁裡操作;它不是下載後直接開啟 Excel 的桌面軟體。
git clone https://github.com/simonw/datasette.git
cd datasette
git checkout a8e13cc489b41f2f9a5aa691f5eb1bedf99a0e0b
python3 -m venv .venv
source .venv/bin/activate
pip install . sqlite-utils==4.2.1
datasette --version
想重現影片,可用下面的自製資料,不必拿公司的檔案測試。四種器材、三個地點,加上可借與已借出兩種狀態,共建立 120 筆。
python - <<'PY'
import csv
rows = []
for i in range(1, 121):
rows.append({
'編號': f'E{i:03}',
'器材': ['投影機', '相機', '麥克風', '筆電'][(i-1) % 4],
'地點': ['台南', '台北', '高雄'][(i-1)//4 % 3],
'狀態': '可借' if (i-1)//12 % 2 == 0 else '已借出'
})
with open('equipment.csv', 'w', encoding='utf-8', newline='') as f:
w = csv.DictWriter(f, fieldnames=list(rows[0]))
w.writeheader()
w.writerows(rows)
PY
sqlite-utils insert equipment.db gear equipment.csv --csv --pk 編號
datasette equipment.db --host 127.0.0.1 --port 8001
開啟 http://127.0.0.1:8001/equipment/gear。這個網址只供自己的電腦使用,影片沒有把服務部署成公開網站。

從整張表縮成要借的器材
查詢頁上有欄位、比較方式與輸入框。本次實際送入三個相等條件:地點是「台南」、器材是「投影機」、狀態是「可借」。這三個條件是同時成立,不是任一條件符合就算。畫面最後顯示 5 筆:E001、E025、E049、E073、E097。

| 實測項目 | 結果 |
|---|---|
| 原始器材清單 | 120 筆 |
| 台南、投影機、可借 | 5 筆 |
| 相同條件匯出 CSV | 5 筆,逐欄與編號一致 |
| 台南、投影機、維修中 | 0 筆 |
查詢結果可以從頁面的 CSV 連結匯出;要重現本次匯出條件,也可以在另一個終端機執行:
curl --get 'http://127.0.0.1:8001/equipment/gear.csv' \
--data-urlencode '地點__exact=台南' \
--data-urlencode '器材__exact=投影機' \
--data-urlencode '狀態__exact=可借' \
-o selected.csv
本次另外讀取 JSON 與 CSV,逐欄比對後一致。三次 HTTP 查詢合計約 0.021 秒,只是同一次的小型資料測試,不能推算大型清單或多人同時使用的速度。
遇到的問題與使用界線
最初將資料表命名為「器材」,測試網址在重新導向後遇到 404;改用英文表名 gear,中文欄位與中文內容保留,後續查詢成功。這只說明本次網址用法踩到的問題,不代表所有中文資料表都不能使用。JSON 回傳也需讀取 rows 欄位;教學固定版本,是為了避免照舊版範例直接解析而出錯。
查到「可借」不等於已完成借用。原始表若沒更新,查詢頁看到的也會是舊資料,因此拿到編號後仍應向管理者確認。本次沒有驗證登入權限、多人更新、預約流程或正式部署,也沒有測過它會自動追蹤器材狀態。
我的選擇是:常常要從同一份資料查不同組合,可以考慮把前置設定做好;偶爾查一次,用原本試算表的篩選功能就很合理。它真正省下的是重複翻找資料的步驟,並不替代器材管理流程。
專案:Datasette;授權:Apache-2.0。背景與安裝方式可查官方入門文件,本文實測仍以指定開發版與本次收據為準。