mirror of
https://github.com/simonw/dclient.git
synced 2026-07-29 20:34:32 +02:00
- Fix _api_get to follow redirects (needed for query endpoint on
newer Datasette which redirects /{db}.json?sql= to /{db}/-/query)
- Add demo.md showing all new commands against a live Datasette instance:
create-table, insert, databases, tables, schema, rows (with filtering,
sorting, column selection, CSV export), get, query, update, upsert,
delete, drop
https://claude.ai/code/session_01DoiJf9Gbvbw2asN9yvP6dx
6.2 KiB
6.2 KiB
dclient - Datasette CLI Client Demo
2026-02-12T00:32:10Z
This demo exercises dclient's new commands against a live Datasette instance with a mutable in-memory database.
Create a Table
uv run dclient create-table http://127.0.0.1:8042/demo dogs --column id integer --column name text --column age integer --column breed text --pk id --token dstok_eyJhIjoicm9vdCIsInQiOjE3NzA4NTYzMDR9.sS2CL5TE8hnxhyI1sOHvyFTA5d4
{
"ok": true,
"database": "demo",
"table": "dogs",
"table_url": "http://127.0.0.1:8042/demo/dogs",
"table_api_url": "http://127.0.0.1:8042/demo/dogs.json",
"schema": "CREATE TABLE [dogs] (\n [id] INTEGER PRIMARY KEY,\n [name] TEXT,\n [age] INTEGER,\n [breed] TEXT\n)"
}
Insert Data from CSV
cat /tmp/dogs.csv | uv run dclient insert http://127.0.0.1:8042/demo dogs - --csv --token dstok_eyJhIjoicm9vdCIsInQiOjE3NzA4NTYzMDR9.sS2CL5TE8hnxhyI1sOHvyFTA5d4
List Databases
uv run dclient databases http://127.0.0.1:8042 --table --token dstok_eyJhIjoicm9vdCIsInQiOjE3NzA4NTYzMDR9.sS2CL5TE8hnxhyI1sOHvyFTA5d4
name path is_mutable
------- ---- ----------
_memory False
demo True
List Tables
uv run dclient tables http://127.0.0.1:8042/demo --table --token dstok_eyJhIjoicm9vdCIsInQiOjE3NzA4NTYzMDR9.sS2CL5TE8hnxhyI1sOHvyFTA5d4
name rows columns
---- ---- --------------------
dogs 5 id, name, age, breed
View Schema
uv run dclient schema http://127.0.0.1:8042/demo --token dstok_eyJhIjoicm9vdCIsInQiOjE3NzA4NTYzMDR9.sS2CL5TE8hnxhyI1sOHvyFTA5d4
CREATE TABLE [dogs] (
[id] INTEGER PRIMARY KEY,
[name] TEXT,
[age] INTEGER,
[breed] TEXT
);
Browse Rows
uv run dclient rows http://127.0.0.1:8042/demo/dogs --table --token dstok_eyJhIjoicm9vdCIsInQiOjE3NzA4NTYzMDR9.sS2CL5TE8hnxhyI1sOHvyFTA5d4
id name age breed
-- -------- --- ----------------
1 Cleo 5 Golden Retriever
2 Pancakes 3 Poodle
3 Fido 7 Labrador
4 Muffin 2 Corgi
5 Rex 4 German Shepherd
Filter to dogs older than 4.
uv run dclient rows http://127.0.0.1:8042/demo/dogs --table -w age__gt=4 --token dstok_eyJhIjoicm9vdCIsInQiOjE3NzA4NTYzMDR9.sS2CL5TE8hnxhyI1sOHvyFTA5d4
id name age breed
-- ---- --- ----------------
1 Cleo 5 Golden Retriever
3 Fido 7 Labrador
Sort by age descending.
uv run dclient rows http://127.0.0.1:8042/demo/dogs --table --sort-desc age --token dstok_eyJhIjoicm9vdCIsInQiOjE3NzA4NTYzMDR9.sS2CL5TE8hnxhyI1sOHvyFTA5d4
id name age breed
-- -------- --- ----------------
3 Fido 7 Labrador
1 Cleo 5 Golden Retriever
5 Rex 4 German Shepherd
2 Pancakes 3 Poodle
4 Muffin 2 Corgi
Export selected columns as CSV.
uv run dclient rows http://127.0.0.1:8042/demo/dogs --csv --col name --col breed --token dstok_eyJhIjoicm9vdCIsInQiOjE3NzA4NTYzMDR9.sS2CL5TE8hnxhyI1sOHvyFTA5d4
id,name,breed
1,Cleo,Golden Retriever
2,Pancakes,Poodle
3,Fido,Labrador
4,Muffin,Corgi
5,Rex,German Shepherd
Get a Single Row by Primary Key
uv run dclient get http://127.0.0.1:8042/demo/dogs 3 --token dstok_eyJhIjoicm9vdCIsInQiOjE3NzA4NTYzMDR9.sS2CL5TE8hnxhyI1sOHvyFTA5d4
{
"id": 3,
"name": "Fido",
"age": 7,
"breed": "Labrador"
}
SQL Queries with Output Formats
uv run dclient query http://127.0.0.1:8042/demo 'select breed, count(*) as count from dogs group by breed order by count desc' --table --token dstok_eyJhIjoicm9vdCIsInQiOjE3NzA4NTYzMDR9.sS2CL5TE8hnxhyI1sOHvyFTA5d4
breed count
---------------- -----
Poodle 1
Labrador 1
Golden Retriever 1
German Shepherd 1
Corgi 1
Update a Row
uv run dclient update http://127.0.0.1:8042/demo/dogs 3 name=Buddy age=8 --token dstok_eyJhIjoicm9vdCIsInQiOjE3NzA4NTYzMDR9.sS2CL5TE8hnxhyI1sOHvyFTA5d4
{
"ok": true
}
Verify the update.
uv run dclient get http://127.0.0.1:8042/demo/dogs 3 --token dstok_eyJhIjoicm9vdCIsInQiOjE3NzA4NTYzMDR9.sS2CL5TE8hnxhyI1sOHvyFTA5d4
{
"id": 3,
"name": "Buddy",
"age": 8,
"breed": "Labrador"
}
Upsert (Insert or Update)
cat /tmp/upsert.json | uv run dclient upsert http://127.0.0.1:8042/demo dogs - --json --token dstok_eyJhIjoicm9vdCIsInQiOjE3NzA4NTYzMDR9.sS2CL5TE8hnxhyI1sOHvyFTA5d4
Cleo's age is now 6, and Luna was added.
uv run dclient rows http://127.0.0.1:8042/demo/dogs --table --sort id --token dstok_eyJhIjoicm9vdCIsInQiOjE3NzA4NTYzMDR9.sS2CL5TE8hnxhyI1sOHvyFTA5d4
id name age breed
-- -------- --- ----------------
1 Cleo 6 Golden Retriever
2 Pancakes 3 Poodle
3 Buddy 8 Labrador
4 Muffin 2 Corgi
5 Rex 4 German Shepherd
6 Luna 1 Husky
Delete a Row
uv run dclient delete http://127.0.0.1:8042/demo/dogs 4 --yes --token dstok_eyJhIjoicm9vdCIsInQiOjE3NzA4NTYzMDR9.sS2CL5TE8hnxhyI1sOHvyFTA5d4
{
"ok": true
}
Muffin (id=4) is gone.
uv run dclient rows http://127.0.0.1:8042/demo/dogs --table --sort id --token dstok_eyJhIjoicm9vdCIsInQiOjE3NzA4NTYzMDR9.sS2CL5TE8hnxhyI1sOHvyFTA5d4
id name age breed
-- -------- --- ----------------
1 Cleo 6 Golden Retriever
2 Pancakes 3 Poodle
3 Buddy 8 Labrador
5 Rex 4 German Shepherd
6 Luna 1 Husky
Drop a Table
uv run dclient drop http://127.0.0.1:8042/demo/dogs --yes --token dstok_eyJhIjoicm9vdCIsInQiOjE3NzA4NTYzMDR9.sS2CL5TE8hnxhyI1sOHvyFTA5d4
{
"ok": true
}
The dogs table no longer exists.
uv run dclient tables http://127.0.0.1:8042/demo --table --token dstok_eyJhIjoicm9vdCIsInQiOjE3NzA4NTYzMDR9.sS2CL5TE8hnxhyI1sOHvyFTA5d4