datasette/datasette
Simon Willison 8bc9b1ee03
/-/schema and /db/-/schema and /db/table/-/schema pages (plus .json/.md)
* Add schema endpoints for databases, instances, and tables

Closes: #2586

This commit adds new endpoints to view database schemas in multiple formats:

- /-/schema - View schemas for all databases (HTML, JSON, MD)
- /database/-/schema - View schema for a specific database (HTML, JSON, MD)
- /database/table/-/schema - View schema for a specific table (JSON, MD)

Features:
- Supports HTML, JSON, and Markdown output formats
- Respects view-database and view-table permissions
- Uses group_concat(sql, ';' || CHAR(10)) from sqlite_master to retrieve schemas
- Includes comprehensive tests covering all formats and permission checks

The JSON endpoints return:
- Instance level: {"schemas": [{"database": "name", "schema": "sql"}, ...]}
- Database level: {"database": "name", "schema": "sql"}
- Table level: {"database": "name", "table": "name", "schema": "sql"}

Markdown format provides formatted output with headings and SQL code blocks.

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-07 12:01:23 -08:00
..
publish Get publish cloudrun working with latest Cloud Run (#2581) 2025-11-05 09:28:41 -08:00
static Ran prettier 2025-10-25 15:38:07 -07:00
templates /-/schema and /db/-/schema and /db/table/-/schema pages (plus .json/.md) 2025-11-07 12:01:23 -08:00
utils datasette.client.get(..., skip_permission_checks=True) 2025-11-05 13:38:01 -08:00
views /-/schema and /db/-/schema and /db/table/-/schema pages (plus .json/.md) 2025-11-07 12:01:23 -08:00
__init__.py track_event() mechanism for analytics and plugins 2024-01-31 15:21:40 -08:00
__main__.py Add support for running datasette as a module (#556) 2019-07-11 09:07:44 -07:00
actor_auth_cookie.py Remove python-baseconv dependency, refs #1733, closes #1734 2022-05-02 12:39:06 -07:00
app.py /-/schema and /db/-/schema and /db/table/-/schema pages (plus .json/.md) 2025-11-07 12:01:23 -08:00
blob_renderer.py Rename route match groups for consistency, refs #1667, #1660 2022-03-19 09:52:08 -07:00
cli.py datasette --get --headers option, closes #2578 2025-11-04 18:12:15 -08:00
database.py Filter out temp database from attached_databases() 2025-10-30 15:48:10 -07:00
default_actions.py Move takes_child/takes_parent information from Action to Resource (#2567) 2025-11-01 11:35:08 -07:00
default_magic_parameters.py Fix datetime.utcnow deprecation warning 2024-03-15 15:32:12 -07:00
default_menu_links.py Update permission hooks to include source_plugin column and simplify menu_links 2025-10-25 15:38:07 -07:00
default_permissions.py New PermissionSQL.restriction_sql mechanism for actor restrictions 2025-11-03 14:17:51 -08:00
events.py Fix type annotation bugs and remove unused imports 2025-10-26 16:03:13 -07:00
facets.py Fix huge performance bug in DateFacet, refs #2407 2024-08-21 14:38:11 -07:00
filters.py Fix type annotation bugs and remove unused imports 2025-10-26 16:03:13 -07:00
forbidden.py Fixed a bunch of unused imports spotted with ruff 2024-02-06 17:27:20 -08:00
handle_exception.py debugger: load 'ipdb' if present 2024-08-20 20:02:35 -07:00
hookspecs.py Remove permission_allowed hook entirely, refs #2528 2025-10-25 15:38:07 -07:00
inspect.py Modernize code to Python 3.6+ (#1158) 2020-12-23 09:04:32 -08:00
permissions.py datasette.client.get(..., skip_permission_checks=True) 2025-11-05 13:38:01 -08:00
plugins.py Fix type annotation bugs and remove unused imports 2025-10-26 16:03:13 -07:00
renderer.py Fix type annotation bugs and remove unused imports 2025-10-26 16:03:13 -07:00
resources.py Move takes_child/takes_parent information from Action to Resource (#2567) 2025-11-01 11:35:08 -07:00
sql_functions.py _search= queries now correctly escaped, fixes #651 2019-12-29 18:48:30 +00:00
tracer.py Tracer now catches errors, closes #2405 2024-08-21 12:19:18 -07:00
url_builder.py count all rows button on table page, refs #2408 2024-08-21 19:09:25 -07:00
version.py Release 1.0a21 2025-11-05 13:51:58 -08:00