Datasette 0.65.5 常用 CLI 命令与工具详解
Datasette 0.65.5 命令行逐条实测:serve 全参数、--get 冒烟验证、inspect 库摘要、plugins/install/uninstall 插件管理、package 打包与 publish 发布(含 0.65.x 内置目标仅剩 cloudrun/heroku 的版本差异)。
Datasette 0.65.5 常用 CLI 命令与工具详解
目标:把 Datasette 0.65.5 命令行工具的每个子命令讲透——
serve、inspect、plugins、install、uninstall、package、publish及全局选项,逐条给出实测命令与真实回显,覆盖日常启动、冒烟验证、插件管理与打包发布全场景。已在 Ubuntu 22.04(Python 3.10.12、Datasette 0.65.5)实测通过。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS(x86_64)
- Python:3.10.12;Datasette:0.65.5(pipx 与 venv 两种形态并存实测)
- 演示数据:
sales.db(orders 5000 行、customers 300 行,含 customers_fts 全文检索表)、inventory.db(products 5 行),位于/srv/datasette/app/ - 命令形态:pipx 安装的在
~/.local/bin/datasette;venv 安装的在/opt/datasette/venv/bin/datasette,二者子命令完全一致
二、工具概览
Datasette 只有一个主命令 datasette,全部功能收敛在 7 个子命令里。datasette --help 实测输出:
datasette --help
Usage: datasette [OPTIONS] COMMAND [ARGS]...
Datasette is an open source multi-tool for exploring and publishing data
About Datasette: https://datasette.io/
Full documentation: https://docs.datasette.io/
Options:
--version Show the version and exit.
--help Show this message and exit.
Commands:
serve* Serve up specified SQLite database files with a web UI
inspect Generate JSON summary of provided database files
install Install plugins and packages from PyPI into the same...
package Package SQLite files into a Datasette Docker container
plugins List currently installed plugins
publish Publish specified SQLite database files to the internet...
uninstall Uninstall plugins and Python packages from the Datasette...
子命令职责速览:
| 子命令 | 职责 | 典型场景 |
|---|---|---|
serve(默认命令,可省略) | 启动 Web 服务 | 日常运行、调试、对外发布 |
inspect | 生成库结构 JSON 摘要 | 配合不可变模式加速启动 |
plugins | 列出已装插件及钩子 | 排障「插件到底装没装上」 |
install / uninstall | 从 PyPI 装/卸插件与包 | 扩展能力管理 |
package | 把库打包成可分发的运行体 | 交付给运维的制品 |
publish | 一键发布到托管平台 | cloudrun / heroku |
💡 说明:
serve后面的*表示它是默认命令——datasette sales.db等价于datasette serve sales.db。
三、前置条件
- 已安装 Datasette 0.65.5(pipx 或 venv 形态均可,见《Ubuntu 22.04 安装 Datasette 0.65.5 指南》);
- 本文命令均可独立执行;涉及演示库的示例以
/srv/datasette/app/下的sales.db、inventory.db为例,换成你自己的.db文件路径即可。
四、serve:启动 Web 服务(核心命令)
4.1 完整参数速查
serve 是日常用得最多的子命令,先把实测的完整参数表沉淀下来。datasette serve --help 实测输出:
datasette serve --help
Usage: datasette serve [OPTIONS] [FILES]...
Serve up specified SQLite database files with a web UI
Options:
-i, --immutable PATH Database files to open in immutable mode
-h, --host TEXT Host for server. Defaults to 127.0.0.1 which
means only connections from the local
machine will be allowed. Use 0.0.0.0 to
listen to all IPs and allow access from
other machines.
-p, --port INTEGER RANGE Port for server, defaults to 8001. Use -p 0
to automatically assign an available port.
[0<=x<=65535]
--uds TEXT Bind to a Unix domain socket
--reload Automatically reload if code or metadata
change detected - useful for development
--cors Enable CORS by serving Access-Control-Allow-
Origin: *
--load-extension PATH:ENTRYPOINT?
Path to a SQLite extension to load, and
optional entrypoint
--inspect-file TEXT Path to JSON file created using "datasette
inspect"
-m, --metadata FILENAME Path to JSON/YAML file containing
license/source metadata
--template-dir DIRECTORY Path to directory containing custom
templates
--plugins-dir DIRECTORY Path to directory containing custom plugins
--static MOUNT:DIRECTORY Serve static files from this directory at
/MOUNT/...
--memory Make /_memory database available
--config CONFIG Deprecated: set config option using
configname:value. Use --setting instead.
--setting SETTING... Setting, see
docs.datasette.io/en/stable/settings.html
--secret TEXT Secret used for signing secure values, such
as signed cookies
--root Output URL that sets a cookie authenticating
the root user
--get TEXT Run an HTTP GET request against this path,
print results and exit
--version-note TEXT Additional note to show on /-/versions
--help-settings Show available settings
--pdb Launch debugger on any errors
-o, --open Open Datasette in your web browser
--create Create database files if they do not exist
--crossdb Enable cross-database joins using the
/_memory database
--nolock Ignore locking, open locked files in read-
only mode
--ssl-keyfile TEXT SSL key file
--ssl-certfile TEXT SSL certificate file
--help Show this message and exit.
重点参数解读(默认值均为实测回显原文):
-h/--host默认127.0.0.1,只有本机能访问;对外须改0.0.0.0或走反向代理;-p/--port默认8001,-p 0自动分配空闲端口;-i/--immutable以不可变模式打开库(启用启动期计数缓存,适合发布后不再变动的数据);--setting覆盖运行时参数(可多次使用),旧版--config已标记 Deprecated;--get启动后对指定路径发一次 GET、打印结果并退出,是脚本化冒烟验证的利器;--root在启动日志输出一次性 root 登录链接(签名 cookie 认证流程实测见《Datasette 0.65.5 配置参数详解》第七节)。
4.2 基本启动与多库挂载
启动一个库(默认 127.0.0.1:8001):
datasette serve sales.db
同时挂多个库、改端口、开跨域(生产常用组合):
datasette serve sales.db inventory.db --host 127.0.0.1 --port 8002 --cors
传目录则进入配置目录模式(目录内 .db、settings.json、metadata.json 自动识别):
datasette serve /srv/datasette/app
启动成功后的日志(实测):
INFO: Started server process [6384]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8006 (Press CTRL+C to quit)
4.3 --get:一条命令完成冒烟验证
--get 让进程启动、请求、打印、退出一次完成,非常适合 CI 或安装后自检:
cd /srv/datasette/demo
datasette serve demo.db --port 8006 --get /demo/notes.json
实测回显(节选):
{"database": "demo", "table": "notes", "is_view": false, "human_description_en": "", "rows": [[1, "第一条笔记", "2026-10-25 10:35:24"], [2, "第二条笔记", "2026-10-25 10:35:24"]], "truncated": false, "filtered_table_rows_count": 2, ...}
返回了表数据 JSON,说明服务、路由、SQL 执行全链路正常。
4.4 不可变模式与 --inspect-file 加速
数据发布后不再变动时,用 -i 标记不可变,并配合第五节的 inspect 摘要跳过启动期的全表计数:
datasette inspect sales.db inventory.db > inspect-data.json
datasette serve -i sales.db -i inventory.db --inspect-file inspect-data.json
大库场景下这能把启动耗时从「逐表 count(*)」降为「读一个 JSON」。
五、inspect:生成库结构摘要
inspect 输出每个库文件的哈希、大小与各表行数,主要用于配合 --inspect-file。
cd /srv/datasette/app
datasette inspect sales.db inventory.db
实测回显:
{
"sales": {
"hash": "143055484b172a612a84e4e4ab1b61d996bb002b92530628811432e9bd779d6a",
"size": 278528,
"file": "sales.db",
"tables": {
"customers": {
"count": 300
},
"orders": {
"count": 5000
},
"customers_fts": {
"count": 300
},
"customers_fts_data": {
"count": 3
},
"customers_fts_idx": {
"count": 1
},
"customers_fts_docsize": {
"count": 300
},
"customers_fts_config": {
"count": 1
}
}
},
"inventory": {
"hash": "31e4a63e16d703523345e15a18c322fd3de59a499792a451109d333038b9bada",
"size": 8192,
"file": "inventory.db",
"tables": {
"products": {
"count": 5
}
}
}
}
解读:hash 是内容哈希(库文件变了哈希就变,可用于缓存失效判断);customers_fts* 是全文检索虚表及其影子表,行数一并列出。日常巡检用它快速确认「库是不是我以为的那份数据」。
六、plugins / install / uninstall:插件管理三件套
6.1 plugins:查看已装插件
未装任何插件时输出空数组:
datasette plugins
[]
6.2 install:从 PyPI 安装插件
以 datasette-json-html(把 JSON 列渲染成可折叠树)为例:
datasette install datasette-json-html
实测回显(节选):
Using cached datasette_json_html-1.0.1-py3-none-any.whl (9.8 kB)
Installing collected packages: datasette-json-html
Successfully installed datasette-json-html-1.0.1
装完复查:
datasette plugins
[
{
"name": "datasette-json-html",
"static": false,
"templates": false,
"version": "1.0.1",
"hooks": [
"prepare_connection",
"render_cell"
]
}
]
解读:输出里最有价值的是 hooks 字段——该插件实现了 prepare_connection 与 render_cell 两个钩子;排障「插件没生效」时先看它是否出现在这里、钩子是否符合预期。插件实际装进了当前 datasette 命令所属的 Python 环境(pipx 形态装进 pipx 的隔离 venv,venv 形态装进对应 venv)。
6.3 uninstall:卸载插件
datasette uninstall datasette-json-html -y
Uninstalling datasette-json-html-1.0.1:
Successfully uninstalled datasette-json-html-1.0.1
复查:
datasette plugins
[]
⚠️ 注意:
-y跳过确认提示,脚本里必加;交互终端可省略。插件变更后需重启运行中的服务实例才生效。
七、package:打包为可分发运行体
package 把库文件、元数据、插件与 Datasette 本体打成一个标准化分发制品(制品类型与运行要求以官方帮助原文为准,见下方实测输出),交付给具备对应运行能力的平台。datasette package --help 实测输出:
Usage: datasette package [OPTIONS] FILES...
Package SQLite files into a Datasette Docker container
Options:
-t, --tag TEXT Name for the resulting Docker container, can
optionally use name:tag format
-m, --metadata FILENAME Path to JSON/YAML file containing metadata to
publish
--extra-options TEXT Extra options to pass to datasette serve
--branch TEXT Install datasette from a GitHub branch e.g. main
--template-dir DIRECTORY Path to directory containing custom templates
--plugins-dir DIRECTORY Path to directory containing custom plugins
--static MOUNT:DIRECTORY Serve static files from this directory at
/MOUNT/...
--install TEXT Additional packages (e.g. plugins) to install
--spatialite Enable SpatialLite extension
--version-note TEXT Additional note to show on /-/versions
--secret TEXT Secret used for signing secure values, such as
signed cookies
-p, --port INTEGER RANGE Port to run the server on, defaults to 8001
[1<=x<=65535]
--title TEXT Title for metadata
--license TEXT License label for metadata
--license_url TEXT License URL for metadata
--source TEXT Source label for metadata
--source_url TEXT Source URL for metadata
--about TEXT About label for metadata
--about_url TEXT About URL for metadata
--help Show this message and exit.
典型用法(目标环境需具备与该制品匹配的运行能力,属于可选分发手段):
datasette package sales.db inventory.db \
-m metadata.json \
--install datasette-json-html \
--title "销售数据探索平台" \
-t my-registry/datasette-sales:0.65.5
要点:-m 打元数据、--install 追加插件、--title/--license/--source 系列选项直接生成元数据字段、-t 指定制品标签。
八、publish:一键发布到托管平台
publish 把库文件连同 Datasette 运行体直接发布到云托管。datasette publish --help 实测输出:
Usage: datasette publish [OPTIONS] COMMAND [ARGS]...
Publish specified SQLite database files to the internet along with a
Datasette-powered interface and API
Options:
--help Show this message and exit.
Commands:
cloudrun Publish databases to Datasette running on Cloud Run
heroku Publish databases to Datasette running on Heroku
⚠️ 注意(版本差异):0.65.5 内置的发布目标只有
cloudrun与heroku两个;早期版本支持的 Vercel、Fly.io 已拆分为独立插件(datasette-publish-vercel、datasette-publish-fly),需要先用datasette install装上才会出现在子命令列表里。以你本机datasette publish --help的实际输出为准。
典型用法:
datasette publish cloudrun sales.db --service datasette-sales
执行后按提示完成云平台认证与项目选择即可;该路径依赖对应云平台的 CLI 与账号,本文不展开实测。
九、全局选项:--version 与 --help-settings
版本查询:
datasette --version
datasette, version 0.65.5
全部运行时参数及默认值速查(配 --setting 使用):
datasette --help-settings
实测输出(节选,完整 20 项逐项详解见《Datasette 0.65.5 配置参数详解》):
Settings:
default_page_size Default page size for the table view
(default=100)
max_returned_rows Maximum rows that can be returned from a table
or custom query (default=1000)
num_sql_threads Number of threads in the thread pool for
executing SQLite queries (default=3)
sql_time_limit_ms Time limit for a SQL query in milliseconds
(default=1000)
...
实例运行环境详情(Python/SQLite/uvicorn 版本与编译选项)不在 CLI 里,而是访问运行中实例的 /-/versions.json 端点:
curl -s http://127.0.0.1:8001/-/versions.json
实测回显(节选):
{"python": {"version": "3.10.12", "full": "3.10.12 (main, Aug 31 2026, 10:18:17) [GCC 11.4.0]"}, "datasette": {"version": "0.65.5"}, "asgi": "3.0", "uvicorn": "0.54.0", "sqlite": {"version": "3.37.2", "fts_versions": ["FTS5", "FTS4", "FTS3"], ...}}
十、注意事项
- 改插件必重启:
install/uninstall只改环境,运行中的实例要重启才加载/卸载插件。 --config已废弃:老教程里的--config default_page_size:50在 0.65.5 上被标记 Deprecated,统一改--setting default_page_size 50。--host 0.0.0.0前三思权限:默认配置下任何人都可执行只读 SQL 并下载库文件,对外发布先收紧权限(见《Datasette 0.65.5 配置参数详解》第七节)。- 不可变模式别挂错库:
-i适合发布后不再变的库;会写的库用不可变模式会导致行数缓存失真。 - pipx 与 venv 形态插件不共享:
datasette install装进「当前命令所属环境」,给 systemd 实例装插件要用该实例的 venv 路径(如/opt/datasette/venv/bin/datasette install ...)。
十一、常见问题(FAQ)
Q1:datasette publish 怎么没有 vercel 子命令?
0.65.x 起 Vercel/Fly.io 发布能力拆成插件。执行 datasette install datasette-publish-vercel 后再看 datasette publish --help(见第八节)。
Q2:插件装了但页面没变化?
三步排查:datasette plugins 确认在列表里 → 看 hooks 是否包含你期望的能力 → 重启运行实例。
Q3:怎么在脚本里验证 Datasette 起没起好?
用 serve --get /<库>/<表>.json:进程启动、请求、打印、退出一气呵成,退出码与输出可直接断言(见 4.3)。
Q4:datasette serve 报 Address already in use?
默认端口 8001 被占。ss -ltnp | grep 8001 找占用进程,或 -p 0 让系统自动分配空闲端口(分配结果看启动日志里的 Uvicorn 行)。
Q5:datasette inspect 的 hash 有什么用?
内容级哈希:库文件任何变化都会改变它。发布流水线里可用它做缓存键或变更检测,配合 --inspect-file 让不可变实例秒级启动。
十二、参考链接
- Datasette 官方 CLI 参考:https://docs.datasette.io/en/stable/cli-reference.html (查询日期 2026-10-25)
- Datasette 官方插件目录:https://datasette.io/plugins (查询日期 2026-10-25)
- datasette-publish-vercel 插件:https://datasette.io/plugins/datasette-publish-vercel (查询日期 2026-10-25)
- datasette-publish-fly 插件:https://datasette.io/plugins/datasette-publish-fly (查询日期 2026-10-25)
- datasette-json-html 插件:https://datasette.io/plugins/datasette-json-html (查询日期 2026-10-25)