dclient/demo.md
Claude 278c3b67e2
Add follow_redirects to API GET requests and showboat demo
- 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
2026-02-12 00:32:58 +00:00

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