更改日志¶
0.65.1 (2024-12-28)¶
修复了 HTTPX 0.28.0 依赖升级导致的 bug。 (#2443)
0.65 (2024-10-07)¶
升级以兼容 Python 3.13(通过内嵌 Pint 依赖)。 (#2434)
放弃了对 Python 3.8 的支持。
0.64.8 (2024-06-21)¶
0.64.7 (2024-06-12)¶
修复了一个 bug,即针对 SQLite 3.46.0 运行带有命名参数的预设查询时会抛出错误。 (#2353)
0.64.6 (2023-12-22)¶
修复了一个 bug,即如果外键引用未能正确解析,带有展开标签的 CSV 导出可能会失败。 (#2214)
0.64.5 (2023-10-08)¶
移除了对
click-default-group-wheel
的依赖,该依赖可能导致依赖冲突。 (#2197)
0.64.4 (2023-09-21)¶
修复了查看命名内存数据库的表页面时导致的崩溃 bug。 (#2189)
0.64.3 (2023-04-27)¶
0.64.2 (2023-03-08)¶
修复了
datasette publish cloudrun
的一个 bug,即所有部署都使用了相同的 Docker 镜像标签。这通常影响不大,因为服务在镜像推送到注册表后会立即部署,但如果两个不同服务的两个不同部署同时运行,可能会导致部署错误的镜像。 (#2036)
0.64.1 (2023-01-11)¶
0.64 (2023-01-09)¶
Datasette 现在强烈建议在使用 SpatiaLite 时不要允许任意 SQL 查询。SpatiaLite 包含可能导致 Datasette 服务器崩溃的 SQL 函数。更多详细信息请参见 SpatiaLite。
新增 default_allow_sql 设置,提供一种更简便的方法来禁用最终用户执行所有任意 SQL:
datasette --setting default_allow_sql off
。另请参见 控制执行任意 SQL 的能力。 (#1409)使用 SpatiaLite 构建位置到时区 API 是一篇新的 Datasette 教程,展示了如何安全地使用 SpatiaLite 创建位置到时区 API。
关于 如何调试加载 SQLite 扩展时的问题 的新文档。当无法加载扩展时显示的错误消息也得到了改进。 (#1979)
修复了一个可访问性问题:表格过滤表单中的
<select>
元素在当前聚焦时会显示轮廓。 (#1771)
0.63.3 (2022-12-17)¶
修复了一个 bug,即在 Docker 中运行
datasette --root
时,仅在服务器关闭时输出以 root 身份登录的 URL,而不是在启动时输出。 (#1958)您不再需要确保调用了
await datasette.invoke_startup()
才能使 Datasette 正确开始服务请求 - 这现在在服务器接收到第一个请求时自动处理。这修复了当 Datasette 由 ASGI 应用程序服务器(如 Uvicorn 或 Gunicorn)直接提供服务时遇到的 bug。它还修复了 datasette-gunicorn 插件的 bug。 (#1955)
0.63.2 (2022-11-18)¶
修复了
datasette publish heroku
中的一个 bug,该 bug 导致部署因请求了旧版本的 Python 而失败。 (#1905)新增
datasette publish heroku --generate-dir <dir>
选项,用于生成 Heroku 部署目录而不进行实际部署。
0.63.1 (2022-11-10)¶
修复了一个 bug,即当 Datasette 在使用 base_url 设置的代理后面运行时,表格过滤表单无法正确重定向。 (#1883)
如果查询超出时间限制,SQL 查询现在会显示在
<textarea>
中。 (#1876)修复了运行测试套件时间歇出现的“打开文件过多”错误。 (#1843)
新增 db.close() 内部方法。
0.63 (2022-10-27)¶
有关此版本中更改的更多背景信息,请参阅 Datasette 0.63:带注释的发行说明。
功能特性¶
现在针对 Python 3.11 进行测试。
datasette publish
和datasette package
使用的 Docker 容器现在都使用该版本的 Python。 (#1853)--load-extension
选项现在支持入口点。感谢 Alex Garcia。 (#1789)现在可以使用新的
facet_size
表元数据选项按表设置分面大小。 (#1804)truncate_cells_html 设置现在也影响列中的长 URL。 (#1805)
非 JavaScript SQL 编辑器文本区域现在会增加高度以适应 SQL 查询。 (#1786)
分面现在在长值中显示时具有更好的换行。感谢 Daniel Rech。 (#1794)
SQL 查询现在可以包含开头的 SQL 注释,使用
/* ... */
或-- ...
语法。感谢 Charles Nepote。 (#1860)当 SQL 查询因时间限制错误而终止时,现在会重新显示该查询。 (#1819)
在 配置目录模式 中,文件名以
.sqlite
或.sqlite3
结尾的数据库现在会自动添加到 Datasette 实例中。 (#1646)面包屑导航显示现在尊重当前用户的权限。 (#1831)
插件钩子和内部机制¶
prepare_jinja2_environment(env, datasette) 插件钩子现在接受可选的
datasette
参数。钩子实现现在也可以返回一个async
函数,该函数将自动被等待。 (#1809)Database(is_mutable=)
现在默认为True
。 (#1808)datasette.check_visibility() 方法现在接受可选的
permissions=
列表,允许在决定某项内容应显示为公共还是私有时一次性考虑多个权限。这已被用于在 Datasette 界面更多地方正确显示挂锁图标。 (#1829)Datasette 不再强制其依赖项的上限。 (#1800)
文档¶
文档中的截图现在使用 shot-scraper 维护,如 使用 shot-scraper 自动化生成 Datasette 文档截图 中所述。 (#1844)
关于 使用 OpenRC 运行 Datasette 的新文档 - 感谢 Adam Simpson。 (#1825)
0.62 (2022-08-14)¶
Datasette 现在可以使用 WebAssembly 完全在您的浏览器中运行。试试 Datasette Lite,查看 代码,或阅读 Datasette Lite:一个在浏览器中运行的服务器端 Python Web 应用程序 了解更多信息。
Datasette 现在有一个 Discord 社区,用于讨论 Datasette 及其生态项目并提出问题。
功能特性¶
Datasette 现在与 Pyodide 兼容。这是 Datasette Lite 背后的核心技术。 (#1733)
数据库文件下载现在使用 ETags 实现条件 GET。 (#1739)
分面结果和建议结果的 HTML 已被提取到新的模板
_facet_results.html
和_suggested_facets.html
中。感谢 M. Nasimul Haque。 (#1759)Datasette 现在并行运行一些 SQL 查询。这对性能影响有限,详细信息请参见 此研究问题。
新增
--nolock
选项,用于在打开只读数据库时忽略文件锁。 (#1744)URL 中数据库名称中的空格现在编码为
+
而不是~20
。 (#1701)<Binary: 2427344 bytes>
现在显示为<Binary: 2,427,344 bytes>
,并带有显示“2.3MB”的工具提示。 (#1712)datasette publish cloudrun
、datasette package
以及 官方 Datasette 镜像 使用的基础 Docker 镜像已升级到3.10.6-slim-bullseye
。 (#1768)针对不可变数据库的可写预设查询现在显示警告消息。 (#1728)
datasette publish cloudrun
新增--timeout
选项,可用于增加 Google Cloud 构建环境施加的时间限制。感谢 Tim Sherratt。 (#1717)datasette publish cloudrun
新增--min-instances
和--max-instances
选项。 (#1779)
插件钩子¶
新插件钩子:handle_exception(),用于自定义处理 Datasette 捕获的异常。 (#1770)
render_cell() 插件钩子现在也会传递一个
row
参数,表示正在渲染的sqlite3.Row
对象。 (#1300)配置目录 现在存储在
datasette.config_dir
中,从而可供插件访问。感谢 Chris Amico。 (#1766)
Bug 修复¶
文档¶
0.61.1 (2022-03-23)¶
修复了一个 bug,即路由与其名称不同的数据库(如 datasette-hashed-urls 插件 所用)在执行自定义 SQL 查询时返回错误。 (#1682)
0.61 (2022-03-23)¶
为准备 Datasette 1.0,此版本包含两项可能向后不兼容的更改。哈希 URL 模式已移至一个单独的插件,Datasette 生成包含特殊字符(如 /
和 .
)的数据库和表的 URL 的方式也发生了变化。
Datasette 现在还要求 Python 3.7 或更高版本。
Datasette 内部的 URL 现在对包含超出
a-zA-Z0-9_-
范围的“特殊”字符的表或数据库使用不同的编码方案。该方案在此解释:波浪号编码。 (#1657)从 Datasette 中移除了哈希 URL 模式。新的
datasette-hashed-urls
插件可用于实现相同的结果,详细信息请参见 datasette-hashed-urls。 (#1661)数据库现在可以在 Datasette 实例中拥有一个独立于数据库名称的自定义路径,使用
db.route
属性。 (#1668)不再支持 Python 3.6。 (#1577)
测试现在针对 Python 3.11-dev 运行。 (#1621)
新增 datasette.ensure_permissions(actor, permissions) 内部方法,用于一次性检查多个权限。 (#1675)
新增 datasette.check_visibility(actor, action, resource=None) 内部方法,用于检查用户是否可以看到未认证用户无法看到的资源。 (#1678)
表格和行 HTML 页面现在包含一个
<link rel="alternate" type="application/json+datasette" href="...">
元素,并返回指向这些页面的 JSON 版本的Link: URL; rel="alternate"; type="application/json+datasette"
HTTP 头部。 (#1533)Access-Control-Expose-Headers: Link
现在被添加到 CORS 头部,允许远程 JavaScript 访问该头部。预设查询现在显示在数据库页面的顶部,紧挨着 SQL 编辑器下方。之前它们显示在底部,表格列表下方。 (#1612)
Datasette 现在有默认的网站图标。 (#1603)
sqlite_stat
表现在默认隐藏。 (#1587)SpatiaLite 表
data_licenses
、KNN
和KNN2
现在默认隐藏。 (#1601)SQL 查询跟踪机制现在适用于在
asyncio
子任务中执行的查询,例如由asyncio.gather()
创建的任务。 (#1576)datasette.tracer 机制现在已记录。
现在可以直接从顶层
datasette
包导入常用的 Datasette 符号,参见 导入快捷方式。这些符号是Response
、Forbidden
、NotFound
、hookimpl
、actor_matches_allow
。 (#957)/-/versions
页面现在返回 SpatiaLite 使用的库的额外详细信息。 (#1607)文档现在链接到 Datasette 教程。
Datasette 现在也会在
/opt/homebrew
中查找 SpatiaLite - 感谢 Dan Peterson。 (#1649)修复了表中有名为
n
的列时引起的错误。 (#1228)
0.60.2 (2022-02-07)¶
修复了一个 bug,即如果您运行
datasette file.db file.db
,Datasette 会以两个不同的数据库名称打开同一个文件两次。 (#1632)
0.60.1 (2022-01-20)¶
修复了一个 bug,即由于底层依赖项的更改,在 Python 3.6 上安装停止工作。此版本现在可以在 Python 3.6 上安装,但它是 Datasette 支持低于 Python 3.7 的最后一个版本。 (#1609)
0.60 (2022-01-13)¶
插件和内部机制¶
新增插件钩子:filters_from_request(request, database, table, datasette),该钩子在表页面上运行,可用于支持修改 SQL 查询的新自定义查询字符串参数。 (#473)
添加了另外两个写入数据库的方法:await db.execute_write_script(sql, block=True) 和 await db.execute_write_many(sql, params_seq, block=True)。 (#1570)
db.execute_write() 内部方法现在默认为阻塞,直到写操作完成。之前它默认为将写入排队,然后在写入在队列中时继续运行代码。 (#1579)
数据库写入连接现在执行 prepare_connection(conn, database, datasette) 插件钩子。 (#1564)
Datasette()
构造函数不再需要files=
参数,现在已在 Datasette 类 中记录。 (#1563)跟踪功能现在跟踪写入查询,而不仅仅是读取查询。 (#1568)
request.args
暴露的查询字符串变量现在将包含参数(如?foo=&bar=1
中的foo
)的空字符串,而不是完全忽略这些参数。 (#1551)
分面¶
分面中的唯一值数量现在总是显示。之前只有用户指定了
?_facet_size=max
时才显示。 (#1556)类型为
date
或array
的分面现在可以在metadata.json
中配置,参见 metadata.json 中的分面。感谢 David Larlet。 (#1552)表格视图新增
?_nosuggest=1
参数,用于禁用分面建议。 (#1557)修复了
?_facet_array=tags&_facet=tags
只显示两个选定分面中的一个的 bug。 (#625)
其他小修复¶
对 Datasette 首次启动时运行的数据库 schema 内省代码进行了几项性能改进。 (#1555)
现在对外键检测到的标签列不区分大小写,因此
Name
或TITLE
将与name
或title
以相同方式检测。 (#1544)将 Pluggy 依赖项升级到 1.0。 (#1575)
Datasette 文档现在使用 Plausible analytics。
explain query plan
现在允许在查询中使用不同数量的空白字符。 (#1588)新增 CLI 参考 页面,显示每个
datasette
子命令的--help
输出。这导致了帮助文本的几项小改进。 (#1594)修复了可写预设查询无法与自定义模板一起使用的 bug。 (#1547)
改进了对列名带下划线前缀可能导致不必要隐藏表单字段的 bug 的修复。 (#1527)
0.59.4 (2021-11-29)¶
0.59.3 (2021-11-20)¶
0.59.2 (2021-11-13)¶
0.59.1 (2021-10-24)¶
0.59 (2021-10-14)¶
新增插件钩子:register_commands() 插件钩子允许插件注册额外的 Datasette CLI 命令,例如
datasette mycommand file.db
。 (#1449)向表页面添加
?_facet_size=max
现在显示每个分面中的唯一值数量。 (#1423)升级依赖项 httpx 0.20 - datasette.client 中未记录的
allow_redirects=
参数现在是follow_redirects=
,并且默认为False
,而之前默认为True
。 (#1488)--cors
选项现在使 Datasette 除了返回Access-Control-Allow-Origin: *
外,还返回Access-Control-Allow-Headers: Authorization
头部。 (#1467)用于确定 SQL 查询需要哪些命名参数以便显示相应表单字段的代码不再被包含冒号字符的字符串混淆。 (#1421)
将
--help-config
选项重命名为--help-settings
。 (#1431)datasette.databases
属性现在是一个已记录的 API。 (#1443)base.html
模板现在将除<footer>
之外的所有内容包装在一个<div class="not-footer">
元素中,以帮助进行高级 CSS 定制。 (#1446)render_cell() 插件钩子现在可以返回一个可等待的函数。这意味着该钩子可以执行 SQL 查询。 (#1425)
register_routes(datasette) 插件钩子现在接受可选的
datasette
参数。 (#1404)datasette publish cloudrun 新增
--cpu
选项。 (#1420)如果 Rich 安装在与 Datasette 相同的虚拟环境中,它将用于在控制台上提供增强的错误追踪显示。 (#1416)
datasette.utils
的 parse_metadata(content) 函数,由新的 datasette-remote-metadata 插件 使用,现在是一个已记录的 API。 (#1405)修复了
?_next=x&_sort=rowid
可能抛出错误的 bug。 (#1470)列齿轮菜单不再显示对已由元数据中的默认分面选定的列进行分面的选项。 (#1469)
0.58.1 (2021-07-16)¶
修复了由
refresh_schemas()
内部函数引起的间歇性竞态条件问题。 (#1231)
0.58 (2021-07-14)¶
新增
datasette --uds /tmp/datasette.sock
选项,用于将 Datasette 绑定到 Unix 域套接字,参见 代理文档 (#1388)"searchmode": "raw"
表元数据选项,用于将表默认设置为直接执行 SQLite 全文搜索语法而不先进行转义,参见 高级 SQLite 搜索查询。 (#1389)新增插件钩子:get_metadata(datasette, key, database, table),用于返回实例、数据库或表的自定义元数据。感谢 Brandon Roberts! (#1384)
新增插件钩子:skip_csrf(datasette, scope),用于根据传入请求选择退出 CSRF 防护。 (#1377)
menu_links()、table_actions() 和 database_actions() 插件钩子都新增了一个可选的
request
参数,提供对当前请求的访问。 (#1371)Datasette 分面性能的重大改进。 (#1394)
改进了 在代理后运行 Datasette 的文档,推荐在 Apache 中使用
ProxyPreservehost On
。 (#1387)对不支持
POST
HTTP 动词的端点发送POST
请求现在返回 405 错误。db.path
现在可以作为pathlib.Path
对象提供,这在为插件编写单元测试时很有用。感谢 Chris Amico。 (#1365)
0.57.1 (2021-06-08)¶
0.57 (2021-06-05)¶
除安全修复外,此版本还包括用于控制表显示列的 ?_col=
和 ?_nocol=
选项,用于增加返回的分面结果数量的 ?_facet_size=
选项,在出错时重新显示您的 SQL 查询,以及多项错误修复。
新特性¶
如果在执行用户提供的 SQL 查询时出错,该查询现在会以可编辑的形式与错误消息一起重新显示。(#619)
新的
?_col=
和?_nocol=
参数,用于显示和隐藏表中的列,以及在列齿轮菜单中隐藏和显示列的界面。(#615)一个新的
?_facet_size=
参数,用于自定义表或视图页面上返回的分面结果数量。(#1332)?_facet_size=max
将其设置为最大值,默认为 1,000,由 max_returned_rows 设置控制。如果分面结果被截断,分面列表底部的 … 现在链接到此参数。(#1337)?_nofacet=1
选项用于禁用页面上所有分面计算,作为 CSV 导出和?_shape=array/object
的性能优化。(#1349、#263)?_nocount=1
选项用于禁用完整的查询结果计数。(#1353)?_trace=1
调试选项现在由新的 trace_debug 设置控制,该设置默认关闭。(#1359)
错误修复及其他改进¶
0.56.1 (2021-06-05)¶
0.56 (2021-03-28)¶
文档改进、错误修复和对 SpatiaLite 5 的支持。
SQL 编辑器现在可以通过拖动手柄调整大小。(#1236)
修复了因表名中包含空格导致的 JSON 分面和
__arraycontains
过滤器错误。(#1239)升级了
httpx
依赖。(#1005)即使列包含空白字符串,现在也会建议 JSON 分面。(#1246)
新的 datasette.add_memory_database() 方法。(#1247)
Response.asgi_send() 方法现在已记录。(#1266)
Datasette 官方 Docker 镜像现在捆绑了 SpatiaLite 版本 5。(#1278)
修复了在 SQLite 3.16.0 之前的 SQLite 版本上运行 Datasette 时出现的
no such table: pragma_database_list
错误。(#1276)配置目录模式现在可以正确地提供
inspect-data.json
中列出的不可变数据库。感谢 Campbell Allen 和 Frankie Robertson。(#1031、#1229)
0.55 (2021-02-18)¶
支持跨数据库 SQL 查询以及通过 HTTPS 服务的内置支持。
新的
--crossdb
命令行选项使 Datasette 将最多十个数据库文件附加到同一个/_memory
数据库连接。这支持跨数据库 SQL 查询,包括使用连接(joins)和联合(unions)组合不同数据库文件中的数据。详情请参阅 跨数据库查询。(#283)可以使用
--ssl-keyfile
和--ssl-certfile
选项指定 TLS 证书,Datasette 可以通过https://
提供服务,而无需在单独的代理后运行。(#1221)为了与 Datasette 0.54 中引入的新
/_internal
数据库保持一致,/:memory:
页面已重命名(并重定向)为/_memory
。(#1205)添加了关于 在 Datasette 内部抛出错误时使用 pdb 的插件测试文档。(#1207)
官方 Datasette Docker 镜像 (https://hub.docker.com/r/datasetteproject/datasette) 现在使用 Python 3.7.10,应用了该 Python 版本的最新安全修复。(#1235)
0.54.1 (2021-02-02)¶
修复了在重新提交表格页面上的过滤器表单时,
?_search=
和?_sort=
参数被错误地复制的错误。(#1214)
0.54 (2021-01-25)¶
此版本中的两大新功能是存储所有已连接数据库和表详细信息的 _internal
SQLite 内存数据库,以及对插件和附加脚本中 JavaScript 模块的支持。
有关此版本的更多评论,请参阅 Datasette 0.54,带注释的发布说明。
_internal 数据库¶
作为帮助 Datasette 处理更多已连接数据库和表的持续工作的一部分(请参阅 Datasette Library),Datasette 现在维护一个内存中的 SQLite 数据库,其中包含所有附加数据库、表、列、索引和外键的详细信息。(#1150)
这将支持未来的改进,例如可搜索、可分页的所有可用表的首页。
您可以通过以 root 用户身份登录到 latest.datasette.io
演示实例,然后导航到 latest.datasette.io/_internal 来探索此数据库的示例。
插件可以使用这些表以有效的方式自省附加数据。插件作者应注意,这尚未被视为稳定接口,因此使用此功能的任何插件可能需要在 Datasette 1.0 之前进行更改,如果 _internal
表模式发生变化。
命名内存数据库支持¶
作为构建 _internal
数据库工作的一部分,Datasette 现在支持可在多个连接之间共享的命名内存数据库。这允许插件创建内存数据库,该数据库将在 Datasette 服务器进程的整个生命周期内保留数据。(#1151)
Database 类 的新参数 memory_name=
可用于创建命名、共享的内存数据库。
JavaScript 模块¶
JavaScript 模块 在 ECMAScript 2015 中引入,并提供 import
和 export
关键字的原生浏览器支持。
要使用模块,JavaScript 需要包含在带有 type="module"
属性的 <script>
标签中。
Datasette 现在能够在您可能希望利用模块的地方输出 <script type="module">
。在 自定义 CSS 和 JavaScript 中描述的 extra_js_urls
选项现在可以与模块一起使用,extra_body_script() 插件钩子也支持模块。(#1186、#1187)
datasette-leaflet-freedraw 是第一个利用新 JavaScript 模块支持的 Datasette 插件示例。有关此插件的更多信息,请参阅 在地图上绘制形状以查询 SpatiaLite 数据库。
使用 Black 和 Prettier 进行代码格式化¶
Datasette 在 2019 年 6 月采用了 Black 进行规范的 Python 代码格式化。Datasette 现在也拥抱 Prettier 进行 JavaScript 格式化,像 Black 一样,它通过持续集成中的测试强制执行。有关使用这两个工具的说明,请参阅贡献者文档中关于 代码格式化 的新部分。(#1167)
其他更改¶
Datasette 现在可以打开多个同名数据库文件,例如运行
datasette path/to/one.db path/to/other/one.db
。(#509)datasette publish cloudrun
现在为每个部署设置force_https_urls
,修复了一些不正确的http://
链接。(#1178)修复了 在代理后运行 Datasette 中示例 nginx 配置的错误。(#1091)
Datasette 生态系统 文档页面已缩小,以支持
datasette.io
的工具和插件目录。(#1182)请求对象现在提供一个
request.full_path
属性,该属性返回包含查询字符串的路径。(#1184)对 SQL 查询中不允许的
PRAGMA
子句提供了更好的错误消息。(#1185)datasette publish heroku
现在使用python-3.8.7
进行部署。关于 使用 pytest-httpx 测试出站 HTTP 调用 的新插件测试文档。(#1198)
传递给表格页面的所有
?_*
查询字符串参数现在都保存在隐藏的表单字段中,因此当查询过滤器更改时,诸如?_size=10
之类的参数将正确传递到下一页。(#1194)修复了加载名为
test-database (1).sqlite
的数据库文件的错误。(#1181)
0.53 (2020-12-10)¶
Datasette 现在有了官方项目网站,地址是 https://datasette.com.cn/。此版本主要更新了文档以反映新网站。
新的
?column__arraynotcontains=
表格过滤器。(#1132)datasette serve
有一个新的--create
选项,如果数据库文件不存在,它将创建空白数据库文件,而不是退出并报错。(#1135)页脚中的“Powered by Datasette”链接现在链接到 https://datasette.com.cn/。(#1138)
项目新闻不再位于 README 中 - 现在可以在 https://datasette.com.cn/news 找到它。(#1137)
0.52.5 (2020-12-09)¶
修复了结合使用
_searchmode=raw
和?_search_COLUMN
参数导致的错误。(#1134)
0.52.4 (2020-12-05)¶
0.52.3 (2020-12-03)¶
修复了 Datasette 安装在 ARM Amazon Linux 上时,静态资源返回 404 错误的错误。(#1124)
0.52.2 (2020-12-02)¶
0.52.1 (2020-11-29)¶
关于 测试插件 的文档现在建议使用 datasette.client。(#1102)
修复了复合外键生成损坏链接的错误。(#1098)
datasette --load-module=spatialite
现在也检查/usr/local/lib/mod_spatialite.so
。感谢 Dan Peterson。(#1114)
0.52 (2020-11-28)¶
此版本包含了一些与内部品牌重塑相关的更改:Datasette 的配置机制(例如 datasette --config default_page_size:10
)已重命名为设置。
新的
--setting default_page_size 10
选项作为--config default_page_size:10
的替代(注意缺少冒号)。--config
选项已被弃用,但在 Datasette 1.0 之前将继续工作。(#992)/-/config
自省页面现在是/-/settings
,并且之前的页面会重定向到新页面。(#1103)未记录的
datasette.config()
内部方法已被记录的 .setting(key) 方法取代。(#1107)
此版本中还包括
新的插件钩子:database_actions(datasette, actor, database, request),它向数据库页面顶部显示的新齿轮菜单添加菜单项。(#1077)
datasette publish cloudrun
有一个新的--apt-get-install
选项,可用于在部署过程中安装额外的 Ubuntu 包。这对于部署新的 datasette-ripgrep 插件非常有用。(#1110)清理了文档,移除了描述难度较低的词语。(#1089)
以及一些错误修复
0.51.1 (2020-10-31)¶
改进了新的 二进制数据 文档页面。
0.51 (2020-10-31)¶
全新的视觉设计,用于添加导航选项的插件钩子,更好的二进制数据处理,URL 构建实用方法以及更好的代理后运行 Datasette 支持。
新的视觉设计¶
Datasette 不再是白色和灰色搭配蓝色和紫色链接了!Natalie Downe 一直致力于视觉刷新,此版本中包含了第一次迭代。(#1056)

插件现在可以在 Datasette 中添加链接¶
许多现有的 Datasette 插件向 Datasette 界面添加了新页面,提供了诸如上传 CSV、编辑表模式或配置全文搜索等功能的工具。
像这样的插件现在可以从 Datasette 界面的其他部分链接到自身。menu_links(datasette, actor, request) 钩子(#1064)允许插件向 Datasette 的新右上角应用程序菜单添加链接,而 table_actions(datasette, actor, database, table, request) 钩子(#1066)则向表格页面上的新“表格操作”菜单添加链接。
latest.datasette.io 的演示现在包含了一些示例插件。要查看新的表格操作菜单,请先以 root 用户身份登录该演示,然后访问 facetable 表以查看页面顶部的新齿轮图标菜单。
二进制数据¶
SQLite 表可以在 BLOB
列中包含二进制数据。Datasette 现在提供链接供用户直接从 Datasette 下载此数据,并使用这些链接使 CSV 导出中的二进制数据可用。更多详情请参阅 二进制数据。(#1036 和 #1034)。
URL 构建¶
新的 datasette.urls 系列方法可用于生成指向 Datasette 界面中关键页面的 URL,无论是自定义模板还是 Datasette 插件中。更多详情请参阅 在插件中构建 URL。(#904)
在代理后运行 Datasette¶
base_url 配置选项旨在帮助在代理后面的特定路径上运行 Datasette - 例如,如果您想在现有网站的 URL 层次结构中以 /my-datasette/
运行一个 Datasette 实例,并在 nginx 或 Apache 后进行代理。
对此配置选项的支持已大大改进(#1023),现在可以在关于 在代理后运行 Datasette 的新文档部分中找到使用指南。(#1027)
较小的更改¶
在 Datasette 中显示的宽表格现在支持水平滚动(#998)。这是通过使用新的
<div class="table-wrapper">
元素实现的,这可能会影响某些插件的实现(例如 datasette-cluster-map 的此更改)。新的 debug-menu 权限。(#1068)
移除了不起作用的
--debug
选项。(#814)Link:
HTTP 头部分页。(#1014)用于清除过滤器的
x
按钮。(#1016)预设查询上的编辑 SQL 按钮。(#1019)
--load-extension=spatialite
快捷方式。(#1028)列操作菜单的放大动画。(#1039)
现在记录了将模板列表传递给
.render_template()
的选项。(#1045)新的
datasette.urls.static_plugins()
方法。(#1033)datasette -o
选项现在会打开最相关的页面。(#976)datasette --cors
选项现在允许访问/database.db
下载。(#1057)数据库文件下载现在实现了级联权限,因此如果您拥有
view-database-download
权限,即使您没有访问 Datasette 实例的权限,也可以下载数据库。(#1058)关于 为您的插件设计 URL 的新文档。(#1053)
0.50.2 (2020-10-09)¶
修复了 0.50 中引入的另一个错误,即表格页面上的列标题链接损坏。(#1011)
0.50.1 (2020-10-09)¶
修复了 0.50 中引入的错误,即表格、行和查询页面上的导出为 JSON/CSV 链接损坏。(#1010)
0.50 (2020-10-09)¶
此版本的主要新功能是表格页面上的列操作菜单(#891)。此菜单可用于按升序或降序对列进行排序,按该列进行分面数据,或将表格过滤到仅显示该列有值的行。
插件作者可以使用新的 datasette.client 对象从其插件发起内部 HTTP 请求,从而利用 Datasette 的 JSON API。(#943)
新的 部署 Datasette 文档,包含关于在 Linux 服务器上使用 systemd 或在支持 buildpacks 的托管服务提供商上部署 Datasette 的指南。(#514、#997)
此版本中的其他改进
发布到 Google Cloud Run 文档现在涵盖了 Google Cloud SDK 选项。感谢 Geoffrey Hing。(#995)
新的
datasette -o
选项,Datasette 启动后立即打开您的浏览器。(#970)Datasette 现在设置
sqlite3.enable_callback_tracebacks(True)
,以便自定义 SQL 函数中的错误会显示回溯。(#891)新的
db.table_column_details(table)
自省方法,用于检索特定表中列的完整详细信息,请参阅 数据库自省。修复了自定义页面通配符模板的路由错误。(#996)
datasette publish heroku
现在使用 Python 3.8.6 进行部署。新的
datasette publish heroku --tar=
选项。(#969)针对 HTML 页面的
OPTIONS
请求不再返回 500 错误。(#1001)Datasette 现在支持 Python 3.9。
另请参阅 Datasette 0.50:带注释的发布说明。
0.49.1 (2020-09-15)¶
修复了使用魔法参数但不接受非魔法参数的可写入预设查询的错误。(#967)
0.49 (2020-09-14)¶
另请参阅 Datasette 0.49:带注释的发布说明。
可写入的预设查询现在公开了 JSON API,请参阅 可写入预设查询的 JSON API。(#880)
定义带有自定义路径参数的页面模板的新机制 - 一个名为
pages/about/{slug}.html
的模板文件将用于渲染对/about/something
的任何请求。请参阅 页面路径参数。(#944)register_output_renderer()
渲染函数现在可以返回一个Response
。(#953)datasette install
新增--upgrade
选项。(#945)新的
datasette --pdb
选项。(#962)datasette --get
退出代码现在反映了内部 HTTP 状态码。(#947)用于返回 404 错误的新模板函数
raise_404()
。(#964)datasette publish heroku
现在使用 Python 3.8.5 进行部署将 CodeMirror 升级到 5.57.0。(#948)
代码风格升级到 Black 20.8b1。(#958)
修复了在表格页面上选定的分面未正确保存在隐藏表单字段中的错误。(#963)
默认错误模板从
500.html
重命名为error.html
。
0.48 (2020-08-16)¶
Datasette 文档现在位于 docs.datasette.io。
db.is_mutable
属性现在已记录和测试,请参阅 数据库自省。extra_template_vars
、extra_css_urls
、extra_js_urls
和extra_body_script
插件钩子现在都接受相同的参数。详情请参阅 extra_template_vars(template, database, table, columns, view_name, request, datasette)。(#939)这些钩子现在接受一个新的
columns
参数,详细说明了在该页面上将渲染的表格列。(#938)修复了调用
db.execute_write_fn()
的插件如果连接失败可能导致 Datasette 挂起的错误。(#935)修复了
?_nl=on
输出选项和二进制数据的错误。(#914)
0.47.3 (2020-08-15)¶
datasette --get
命令行机制现在确保任何使用startup()
钩子的插件都能正确执行。(#934)
0.47.2 (2020-08-12)¶
修复了发布到 Docker Hub 的 Docker 镜像的问题。(#931)
0.47.1 (2020-08-11)¶
修复了 Datasette 的
sdist
分发包未正确包含模板文件的错误。(#930)
0.47 (2020-08-11)¶
Datasette 现在有一个 GitHub discussions 论坛,用于讨论超越错误报告和问题范围的项目话题。
Datasette 现在可以使用 Homebrew 在 macOS 上安装!运行
brew install simonw/datasette/datasette
。请参阅 使用 Homebrew。(#335)两个新命令:
datasette install name-of-plugin
和datasette uninstall name-of-plugin
。这些命令等同于pip install
和pip uninstall
,但会自动在 Datasette 所在的虚拟环境中运行,因此用户无需弄清楚虚拟环境的位置 - 这对于使用 Homebrew 或pipx
创建的安装非常有用。请参阅 安装插件。(#925)一个新的命令行选项
datasette --get
,接受 Datasette 实例内 URL 的路径。它将通过 Datasette 运行该请求(不启动 Web 服务器),并打印出响应。有关示例,请参阅 datasette --get。(#926)
0.46 (2020-08-09)¶
警告
此版本包含与已验证的可写入预设查询相关的安全修复。如果您正在使用此功能,应尽快升级。
安全修复: CSRF 令牌被错误地包含在只读的预设查询表单中,这可能导致它们泄露给复杂的攻击者。详情请参阅 issue 918。
Datasette 现在通过新的 datasette-graphql 插件支持 GraphQL - 请参阅 使用新的 datasette-graphql 插件在 Datasette 中使用 GraphQL。
主 git 分支已从
master
重命名为main
。(#849)新的调试工具:
/-/allow-debug tool
(此处演示)帮助测试针对 actor 的允许块,如 使用“allow”块定义权限 中所述。(#908)文档的新标志,以及新的项目标语:“一个用于探索和发布数据的开源多功能工具”。
现在显示时会尊重列值中的空白,使用
white-space: pre-wrap
。(#896)用于访问原始 POST 主体的新方法
await request.post_body()
,请参阅 请求对象。(#897)数据库文件下载现在包含一个
content-length
HTTP 头部,支持下载进度条。(#905)文件下载现在也正确设置了建议的文件名,使用
content-disposition
HTTP 头部。(#909)tests
现在已正确地从 Datasette 包中排除 - 感谢 abeyerpath。(#456)发布到 PyPI 的 Datasette 包现在包含
sdist
和bdist_wheel
。更好的预设查询页面标题。(#887)
现在只从使用
--plugins-dir
选项传递的目录中加载 Python 文件 - 感谢 Amjith Ramanujam。(#890)关于 发布到 Vercel 的新文档部分。
0.45 (2020-07-01)¶
另请参阅 Datasette 0.45:带注释的发布说明。
预设查询的魔法参数、退出登录功能、改进的插件文档以及四个新的插件钩子。
预设查询的魔法参数¶
预设查询现在支持 魔法参数,可用于插入或选择自动生成的值。例如
insert into logs
(user_id, timestamp)
values
(:_actor_id, :_now_datetime_utc)
这会插入当前已验证的 actor ID 和当前日期时间。(#842)
退出登录¶
插件(或 Datasette 的 --root 机制)可以使用 ds_actor cookie 进行用户验证。新的 /-/logout
页面提供了一种清除该 cookie 的方法。
只要用户使用 ds_actor
cookie 进行验证,全局导航中就会显示“退出登录”按钮。(#840)
改进的插件文档¶
插件文档已被重新组织成四个部分,包括全新的插件测试部分。(#687)
新的插件钩子¶
register_magic_parameters(datasette) 可用于定义新的魔法预设查询参数类型。
startup(datasette) 可以在 Datasette 首次启动时运行自定义代码。datasette-init 是一个使用此钩子在启动时创建数据库表和视图的新插件,如果它们尚未创建。(#834)
canned_queries(datasette, database, actor) 允许插件提供元数据中定义的预设查询之外的其他预设查询。有关此钩子实际应用的示例,请参阅 datasette-saved-queries。(#852)
forbidden(datasette, request, message) 是一个用于自定义 Datasette 如何响应 403 Forbidden 错误的钩子。(#812)
较小的更改¶
级联视图权限 - 如果用户拥有
view-table
权限,即使没有view-database
或view-instance
权限,他们也可以查看表格页面。(#832)CSRF 保护不再应用于
Authentication: Bearer token
请求或不带 cookie 的请求。(#835)datasette.add_message()
现在可以在插件内部使用。(#864)测试运行中“打开文件过多”错误的变通方法。(#846)
如果 ASGI 中间件已设置,则尊重现有的
scope["actor"]
。(#854)Alpha 和 Beta 版本 的新发布流程。(#807)
当插件使用
datasette.render_template(..., request=request)
渲染模板时,{{ csrftoken() }}
现在可以工作了。(#863)
0.44 (2020-06-11)¶
另请参阅 Datasette 0.44:带注释的发布说明。
身份验证和权限、可写入的预设查询、闪现消息、新的插件钩子等。
身份验证¶
在此版本之前,Datasette 生态系统一直将身份验证视为插件的专属领域,其中最著名的是 datasette-auth-github。
0.44 将 身份验证和权限 作为核心 Datasette 概念引入(#699)。这使得不同的插件可以分担验证请求的责任 - 例如,您可能有一个插件处理用户账户,另一个插件允许通过 API 密钥进行自动化访问。
如果您想要完整的用户账户,您需要安装插件,但默认的 Datasette 现在可以使用新的 --root
命令行选项验证单个 root 用户,该选项会输出一个一次性使用的 URL,用于以 root actor 身份进行验证(#784)
$ datasette fixtures.db --root
http://127.0.0.1:8001/-/auth-token?token=5b632f8cd44b868df625f5a6e2185d88eea5b22237fd3cc8773f107cc4fd6477
INFO: Started server process [14973]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8001 (Press CTRL+C to quit)
插件可以使用新的 actor_from_request(datasette, request) 钩子实现新的用户身份验证方式。
权限¶
Datasette 现在还具有内置的权限概念。权限系统回答了以下问题
此 actor 是否被允许执行此 action,可选地针对此特定 resource?
您可以在 metadata.json
(或 metadata.yaml
)中使用新的 "allow"
块语法,在实例、数据库、表或预设查询级别设置所需的权限。例如,要限制对 fixtures.db
数据库的访问,仅允许 "root"
用户访问:
{
"databases": {
"fixtures": {
"allow": {
"id" "root"
}
}
}
}
更多详情请参阅 使用“allow”块定义权限。
插件可以使用新的 permission_allowed(datasette, actor, action, resource) 钩子实现自己的自定义权限检查。
新的调试页面 /-/permissions
显示最近的权限检查,帮助管理员和插件作者准确理解正在执行哪些检查。此工具默认仅对 root 用户可用,但可以通过响应 permissions-debug
权限的插件将其暴露给其他用户。(#788)
可写入的 Canned Queries¶
Datasette 的 预设查询(Canned Queries) 功能允许您在 metadata.json
中定义 SQL 查询,用户访问特定 URL 即可执行。例如 https://latest.datasette.io/fixtures/neighborhood_search。
预设查询之前仅限于 SELECT
,但 Datasette 0.44 引入了预设查询执行 INSERT
或 UPDATE
查询的能力,使用新的 "write": true
属性(#800)
{
"databases": {
"dogs": {
"queries": {
"add_name": {
"sql": "INSERT INTO names (name) VALUES (:name)",
"write": true
}
}
}
}
}
更多详情请参阅 可写入的预设查询。
闪现消息¶
可写入的预设查询需要一种机制来告知用户查询已成功执行。新的闪现消息系统(#790)允许消息保留在签名 cookie 中,然后在用户访问的下一页上显示。插件可以使用此机制显示自己的消息,详情请参阅 .add_message(request, message, type=datasette.INFO)。
您可以使用 /-/messages
调试工具尝试新消息,例如在 https://latest.datasette.io/-/messages
签名值和密钥¶
闪现消息和用户身份验证都需要一种对值进行签名和设置签名 cookie 的方法。现在提供了两种新方法供插件利用此机制:.sign(value, namespace="default") 和 .unsign(value, namespace="default")。
Datasette 会在启动时自动生成一个密钥,但为了避免每次服务器重启时都重置密钥(从而使任何 cookie 失效),您应该设置自己的密钥。您可以使用新的 --secret
选项或 DATASETTE_SECRET
环境变量将密钥传递给 Datasette。更多详情请参阅 配置密钥。
您在使用 datasette publish
或 datasette package
部署 Datasette 时也可以设置密钥 - 请参阅 使用 datasette publish 时使用密钥。
插件现在可以使用 datasette.sign() 和 datasette.unsign() 方法对值进行签名和验证其签名。
CSRF 保护¶
由于可写入的预设查询是使用 POST 表单构建的,Datasette 现在自带了 CSRF 保护(#798)。这会自动应用于任何 POST 请求,这意味着插件需要在它们渲染的任何 POST 表单中包含一个 csrftoken
。它们可以这样做:
<input type="hidden" name="csrftoken" value="{{ csrftoken() }}">
`internals_request` 的新方法 request.cookies
可用于读取传入的 cookie。
register_routes() 插件钩子¶
插件现在可以通过 register_routes(datasette) 插件钩子注册新的视图和路由(#819)。可以定义视图函数,这些函数可以接受当前的 datasette
对象、当前的 request
或 ASGI scope
、send
和 receive
对象。
较小的更改¶
关于 Request 对象 和 Response 类 的新内部文档。(#706)
request.args.getlist()
在缺失时返回[]
。彻底移除了request.raw_args
。(#774)新增 datasette.get_database() 方法。
在 Datasette 类许多私有的、未文档化的方法名前添加了
_
前缀。(#576)移除了
db.get_outbound_foreign_keys()
方法,其行为与db.foreign_keys_for_table()
重复。新增
/-/actor
调试端点,用于查看当前已认证的用户(actor)。新增
request.cookies
属性。/-/plugins
端点现在显示每个插件实现的钩子列表,例如 https://latest.datasette.io/-/plugins?all=1request.post_vars()
方法不再丢弃空值。新增 "params" 预设查询(canned query)键,用于显式设置命名参数,详情请参见 预设查询参数。(#797)
request.args
现在是一个 MultiParams 对象。修复了
datasette plugins
命令的一个 bug。(#802)测试中使用
make_app_client()
的模式变得更好用了。(#395)新增
request.actor
属性。修复了嵌套 404 页面上的 CSS 损坏问题。(#777)
新增
request.url_vars
属性。(#822)修复了
python tests/fixtures.py
命令在输出 Datasette 测试 fixtures 数据库和插件时的 bug。(#804)datasette publish heroku
现在使用 Python 3.8.3 进行部署。添加了一个警告,说明 register_facet_classes() 钩子不稳定,将来可能会更改。(#830)
机制
{"$env": "ENVIRONMENT_VARIBALE"}
(参见 Secret configuration values)现在可用于嵌套列表中的变量。(#837)
Datasette 1.0 之路¶
我为 Datasette 1.0 设定了一个 里程碑。1.0 版本的重点如下:
表明对 Datasette 质量/稳定性的信心。
让插件作者相信他们的插件将在整个 1.x 发布周期内可用。
为基于 Datasette JSON API 进行开发的开发者提供同样的信心。
如果您对 Datasette 1.0 有任何想法,可以加入 issue #519 的讨论。
0.43 (2020-05-28)¶
此版本的主要重点是对 register_output_renderer(datasette) 插件钩子进行重大升级,该钩子允许插件为 Datasette 提供新的输出格式,例如 datasette-atom 和 datasette-ics。
重新设计了 register_output_renderer(datasette),为渲染回调提供更多上下文,并支持可选的
"can_render"
回调,该回调控制是否提供指向输出格式的建议链接。(#581, #770)从视觉上区分浮点型和整型列——有助于弄清楚按列排序为何会返回意外结果。(#729)
Request 对象,它被传递给多个插件钩子,现在有了文档。(#706)
新增
metadata.json
选项,用于为特定表和视图设置自定义默认页面大小,详情请参见 设置自定义页面大小。(#751)预设查询现在可以配置默认的 URL fragment hash,这在与 datasette-vega 等插件一起使用时非常有用,详情请参见 其他预设查询选项。(#706)
修复了
datasette publish
在/tmp
目录位于不同卷的操作系统上运行时的一个 bug,使用了 Python 3.8shutil.copytree()
函数的向后移植版本。(#744)每个插件钩子现在都包含在单元测试中,并且新增了一个单元测试来检查每个插件钩子是否至少有一个对应的测试。(#771, #773)
0.42 (2020-05-08)¶
这是一个小型版本,提供了改进的内部方法供插件使用,并附带文档。参见 #685。
新增了
db.execute()
的文档,参见 await db.execute(sql, ...)。将
db.execute_against_connection_in_thread()
重命名为db.execute_fn()
并将其作为文档化方法,参见 await db.execute_fn(fn)。新增
results.first()
和results.single_value()
方法,以及Results
类的文档——参见 Results。
0.41 (2020-05-06)¶
您现在可以使用自定义模板文件在 Datasette 实例中创建 自定义页面。例如,添加一个名为 templates/pages/about.html
的模板文件将在您的实例上生成一个位于 /about
的新页面。有关完整详细信息,包括如何返回自定义 HTTP 头、重定向和状态码,请参阅 自定义页面文档。(#648)
配置目录模式(#731)允许您将自定义 Datasette 实例定义为一个目录。因此,您不必运行以下命令
$ datasette one.db two.db \
--metadata=metadata.json \
--template-dir=templates/ \
--plugins-dir=plugins \
--static css:css
您可以将文件安排在一个名为 my-project
的目录中,并运行此命令
$ datasette my-project/
此版本中还包括
新增
NOT LIKE
表过滤器:?colname__notlike=expression
。(#750)Datasette 现在在
/-/patterns
上有一个 *模式组合*(pattern portfolio)——例如 https://latest.datasette.io/-/patterns。这是一个页面,在一个地方显示了所有 Datasette 用户界面组件,以帮助核心开发和构建自定义 CSS 主题的人。(#151)SQLite PRAGMA 函数,例如
pragma_table_info(tablename)
,现在允许在 Datasette SQL 查询中使用。(#761)Datasette 页面现在始终返回
content-type
为text/html; charset=utf-8"
。(#752)Datasette 现在处理 ASGI
raw_path
值为None
的情况,这应该允许与 Mangum 适配器兼容,用于在 AWS Lambda 上运行 ASGI 应用程序。感谢 Colin Dellow。(#719)
0.40 (2020-04-21)¶
Datasette Metadata 现在可以作为 JSON 的可选替代方案,以 YAML 文件的形式提供。参见 使用 YAML 配置 metadata。(#713)
移除了对
datasette publish now
的支持,它使用了现已退休的 Zeit Now v1 托管平台。可以安装一个新的插件 datasette-publish-now 来将数据发布到 Zeit(现在是 Vercel)Now v2。(#710)修复了
extra_template_vars(request, view_name)
插件钩子未接收到正确的view_name
的 bug。(#716)通过
extra_template_vars()
插件钩子添加到模板上下文的变量现在在?_context=1
调试模式下显示(参见 template_debug)。(#693)修复了“Templates considered” HTML 注释不再显示的问题。(#689)
修复了
datasette publish
的一个 bug,其中--plugin-secret
会覆盖提供的metadata.json
文件中的插件配置。(#724)为自定义预设查询页面添加了一个新的 CSS 类。(#727)
0.39 (2020-03-24)¶
0.38 (2020-03-08)¶
0.37.1 (2020-03-02)¶
对于大于 100MB 的数据库,不尝试在索引页上显示表行数。(#688)
如果写入线程中发生异常,打印出来而不是静默吞掉。
处理
scope["path"]
可能是字符串而不是字节的情况。改进了 extra_template_vars(template, database, table, columns, view_name, request, datasette) 插件钩子的文档。
0.37 (2020-02-25)¶
0.36 (2020-02-21)¶
传递给插件的
datasette
对象现在有 API 文档:Datasette 类。(#576)Datasette 的新方法:
.add_database()
和.remove_database()
- 文档。(#671)prepare_connection()
插件钩子现在接受可选的datasette
和database
参数 - prepare_connection(conn, database, datasette)。(#678)The Datasette Ecosystem 新增了三个新插件和一个新的转换工具。
0.35 (2020-02-04)¶
The Datasette Ecosystem 新增了五个新插件和一个新的转换工具。
Datasette
类新增了一个render_template()
方法,插件可以使用该方法来使用 Datasette 预配置的 Jinja 模板库渲染模板。您现在可以执行以
-- comment
开头的 SQL 查询——感谢 Jay Graves(#653)
0.34 (2020-01-29)¶
_search=
查询现在使用新的escape_fts()
自定义 SQL 函数正确转义。这意味着您现在可以搜索像park.
这样的字符串而不会看到错误。(#651)Google Cloud Run 不再是 beta 版本,因此
datasette publish cloudrun
已更新,即使用户未安装gcloud
beta 组件包也能工作。感谢 Katie McLaughlin(#660)datasette package
现在接受--port
选项,用于指定生成的 Docker 容器应监听哪个端口。(#661)
0.33 (2019-12-22)¶
rowid
现在包含在表格过滤器的下拉菜单中(#636)现在只有当它们至少有一个值包含多个记录时,才建议对列进行分面过滤(#638)
没有结果的查询现在显示“0 results”(0 个结果)(#637)
改进了
--static
选项的文档(#641)asyncio 任务信息现在包含在
/-/threads
调试页面上将 Uvicorn 依赖项升级到 0.11
您现在可以使用
--port 0
来监听可用端口新增 template_debug 设置用于调试模板,例如 https://latest.datasette.io/fixtures/roadside_attractions?_context=1(#654)
0.32 (2019-11-14)¶
Datasette 现在使用 Jinja 异步模式 渲染模板。这意味着插件可以提供执行异步操作的自定义模板函数,例如新的 datasette-template-sql 插件,该插件允许自定义模板直接执行 SQL 查询并渲染结果。(#628)
0.31.2 (2019-11-13)¶
0.31.1 (2019-11-12)¶
使用
datasette publish
创建的部署现在使用python:3.8
基本 Docker 镜像(#629)
0.31 (2019-11-11)¶
此版本增加了对 Python 3.8 的兼容性,并打破了与 Python 3.5 的兼容性。
如果您仍在运行 Python 3.5,则应继续使用 0.30.2
,您可以这样安装:
pip install datasette==0.30.2
Format SQL 按钮现在适用于只读 SQL 查询——感谢 Tobias Kunze(#602)
表格视图新增
?column__notin=x,y,z
过滤器(#614)表格视图现在使用
select col1, col2, col3
代替select *
数据库文件名现在可以包含空格——感谢 Tobias Kunze(#590)
移除了过时的
?_group_count=col
功能(#504)改进了
datasette publish cloudrun
的用户界面和文档(#608)带有索引的表现在在表页面上显示
CREATE INDEX
语句(#618)uvicorn 当前版本现在显示在
/-/versions
上现在支持 Python 3.8!(#622)
不再支持 Python 3.5。
0.30.2 (2019-11-02)¶
0.30.1 (2019-10-30)¶
0.30 (2019-10-18)¶
0.29.3 (2019-09-02)¶
修复了数据库页面上 CodeMirror 的实现(#560)
文档拼写错误修复——感谢 Min ho Kim(#561)
如果表名使用了其他转义机制,检测表是否启用了 FTS 的机制现在也能工作(#570)——为了与 sqlite-utils 的近期更改 兼容。
0.29.2 (2019-07-13)¶
0.29.1 (2019-07-11)¶
0.29 (2019-07-07)¶
ASGI、新的插件钩子、按日期分面等等…
ASGI¶
ASGI 是异步服务器网关接口标准。我一年多以来一直想将 Datasette 转换为 ASGI 应用程序——将 Datasette 移植到 ASGI #272 记录了十三个月的间歇性开发——但在 Datasette 0.29 版本中,这一更改最终发布了。这也意味着 Datasette 现在运行在 Uvicorn 之上,不再依赖 Sanic。
我在 Porting Datasette to ASGI, and Turtles all the way down 中写了关于这一更改的意义。
这一更改最令人兴奋的后果是 Datasette 插件现在可以利用 ASGI 标准。
新增插件钩子:asgi_wrapper¶
asgi_wrapper(datasette) 插件钩子允许插件将其自己的 ASGI 中间件完全包装 Datasette ASGI 应用程序。(#520)
以下两个新插件利用了此钩子
datasette-auth-github 添加了一个认证层:用户必须使用他们的 GitHub 帐户登录才能查看数据或与 Datasette 交互。您还可以使用它限制对特定 GitHub 用户或指定 GitHub 组织 或 团队 成员的访问。
datasette-cors 允许您为 Datasette 实例配置 CORS headers。您可以使用此功能使在白名单域上运行的 JavaScript 能够对 Datasette 实例提供的 JSON API 发起
fetch()
调用。
新增插件钩子:extra_template_vars¶
extra_template_vars(template, database, table, columns, view_name, request, datasette) 插件钩子允许插件将自己的额外变量注入 Datasette 模板上下文。这可以与自定义模板结合使用来定制 Datasette 界面。datasette-auth-github 使用此钩子向新的顶部导航栏添加自定义 HTML(该导航栏设计用于由插件修改,参见 #540)。
秘密插件配置选项¶
像 datasette-auth-github 这样的插件需要一种安全的方法来设置秘密配置选项。由于配置插件的默认机制会在 /-/metadata
中暴露这些设置,因此需要一种新机制。秘密配置值 描述了插件现在如何指定其设置应从文件或环境变量中读取。
{
"plugins": {
"datasette-auth-github": {
"client_secret": {
"$env": "GITHUB_CLIENT_SECRET"
}
}
}
}
这些插件秘密可以直接使用 datasette publish
进行设置。详情请参阅 Custom metadata and plugins。(#538 和 #543)
按日期分面过滤¶
如果一列包含日期时间值,Datasette 现在可以按日期对该列进行分面过滤。(#481)
更简便的表格行自定义模板¶
如果您想自定义单个表格行的显示,可以使用如下所示的 _table.html
模板 include 来实现:
{% for row in display_rows %}
<div>
<h2>{{ row["title"] }}</h2>
<p>{{ row["description"] }}<lp>
<p>Category: {{ row.display("category_id") }}</p>
</div>
{% endfor %}
这是一个 **向后不兼容的更改**。如果您之前有一个名为 _rows_and_columns.html
的自定义模板,则需要将其重命名为 _table.html
。
有关完整详细信息,请参阅 自定义模板。
通过多对多表进行连接的 ?_through=¶
Table 视图的新参数 ?_through={json}
允许根据多对多关系过滤记录。有关完整文档,请参阅 特殊表格参数——这里有一个示例。(#355)
添加此功能是为了支持 按多对多关系分面过滤,该功能尚未完全就绪,但将在 Datasette 的下个版本中提供。
小改动¶
使用
datasette publish
发布的数据库现在以 Immutable mode 打开。(#469)?col__date=
现在适用于包含空格的列自动标签检测(用于决定链接到外部键时显示哪一列)已改进。(#485)
修复了与展开的外部键结合使用时分页中断的 bug。(#489)
贡献者现在可以运行
pip install -e .[docs]
来获取构建文档所需的所有依赖项,包括cd docs && make livehtml
支持。Datasette 的依赖项现在都使用
~=
匹配运算符指定。(#532)表格创建 SQL 现在使用
white-space: pre-wrap
。(#505)
0.28 (2019-05-19)¶
salmagundi(大杂烩)般的新特性!
支持可变数据库¶
从项目一开始,Datasette 就设计为只读数据库。如果数据库保证不变,将带来各种有趣的机会——从利用 SQLite 不可变模式和 HTTP 缓存到直接在 Docker 容器中捆绑数据库的静态副本。Datasette 中的有趣想法 详细探讨了这一想法。
随着我项目目标的演进,我意识到只读数据库不再是正确的默认设置。SQLite 实际上非常好地支持并发访问,前提是只有一个线程尝试一次写入数据库,并且我不断遇到在处理插入和更新的数据库上运行 Datasette 的合理用例。
因此,从 0.28 版本开始,Datasette 不再假设数据库文件不会更改。现在可以安全地将 Datasette 指向正在由另一个进程更新的 SQLite 数据库。
进行此更改花费了大量精力——参见跟踪工单 #418、#419 和 #420。它需要对 Datasette 如何计算表格计数(对大型、变化的数据库进行昂贵的操作)有新的思考,也意味着重新考虑 Datasette 过去用于优化 HTTP 缓存性能的“内容哈希”URL。
Datasette 仍然可以针对不可变文件运行,并从中获得许多性能优势,但这不再是默认行为。请查看新的 性能和缓存 文档部分,了解如何充分利用 Datasette 处理您知道将保持只读和不可变的数据。
分面过滤改进和分面过滤插件¶
Datasette 的 分面过滤 提供了一种直观的方法来快速汇总和与数据交互。以前唯一支持的分面过滤技术是列分面过滤,但 0.28 引入了两个强大的新功能:按 JSON 数组分面过滤和通过插件定义更多分面过滤类型。
按数组分面过滤(#359)仅在您的 SQLite 安装提供 json1
扩展时可用。Datasette 将自动检测包含 JSON 值数组的列,并提供针对这些列的分面过滤界面——这对于在不创建新表格的情况下模拟标签等非常有用。更多信息请参见 按 JSON 数组分面过滤。
新的 register_facet_classes() 插件钩子(#445)可用于注册额外的自定义分面过滤类。每个分面过滤类都应提供两个方法:suggest()
,它建议可能适合给定 SQL 查询的分面选择;以及 facet_results()
,它执行分面过滤操作并返回结果。Datasette 自己的分面过滤实现已重构以使用与这些插件相同的 API。
datasette publish cloudrun¶
Google Cloud Run 是 Google 全新的无服务器托管平台,它允许您构建一个 Docker 容器,该容器只在接收到 HTTP 流量时运行,其余时间将关闭(因此不收取费用)。它类似于 Zeit 的 Now v1 Docker 托管平台,可惜该平台已 不再接受新用户注册。
新的 datasette publish cloudrun
命令由 Romain Primet 贡献(#434),用于将选定的数据库发布到运行在 Google Cloud Run 上的新 Datasette 实例。
有关完整文档,请参阅 发布到 Google Cloud Run。
register_output_renderer 插件¶
Russ Garrett 实现了一个新的 Datasette 插件钩子,称为 register_output_renderer(#441),它允许插件除了 Datasette 默认的 .json
和 .csv
之外,创建额外的输出渲染器。
Russ 正在开发的 datasette-geo 插件包含 一个示例,展示了如何使用此钩子自动将 SpatiaLite 转换为 .geojson
并输出。
中等改动¶
Datasette 现在符合 Black 编码风格(#449)——并且有一个单元测试来确保未来遵循此风格
- 新增 特殊表格参数
?columnname__in=value1,value2,value3
过滤器,用于对表执行 SQL IN 查询,参见 表格参数(#433)?columnname__date=yyyy-mm-dd
过滤器,返回指定日期时间列落在指定日期的行(583b22a)?tags__arraycontains=tag
过滤器,作用于列中包含的 JSON 数组(78e45ea)?_where=sql-fragment
表格视图过滤器(#429)?_fts_table=mytable
和?_fts_pk=mycolumn
查询字符串选项可用于指定搜索查询要使用的 FTS 表——参见 为表或视图配置全文搜索(#428)
您现在可以多次传递相同的表格过滤器——例如,
?content__not=world&content__not=hello
将返回 content 列既不是hello
也不是world
的所有行(#288)您现在可以指定
about
和about_url
metadata(除了source
和license
),链接到项目的更多信息——参见 Source, license and about新增
?_trace=1
参数,现在添加调试信息,显示构建页面时执行的每个 SQL 查询(#435)datasette inspect
现在只计算表格行数,不再检查其他数据库 metadata(#462)彻底移除了
/-/inspect
页面——未来将替换为类似的功能,参见 #465Datasette 现在可以针对内存中的 SQLite 数据库运行。您可以通过不传递任何文件来启动它,或者使用
datasette serve
的新--memory
选项来实现。这对于实验性地执行不访问任何数据的 SQLite 查询非常有用,例如SELECT 1+1
或SELECT sqlite_version()
。
小改动¶
我们现在在下载链接旁边显示数据库文件的大小(#172)
新增
/-/databases
内省页面,显示当前连接的数据库(#470)二进制数据不再显示在表格和行页面上(#442 - 感谢 Russ Garrett)
自定义查询页面上新增显示/隐藏 SQL 链接(#415)
extra_body_script 插件钩子现在接受可选的
view_name
参数(#443 - 感谢 Russ Garrett)将 Jinja2 依赖项升级到 2.10.1(#426)
所有表格过滤器现在都有文档,并且通过单元测试强制执行文档规范(2c19a27)
新增项目指南:master 分支应始终保持可发布状态!(31f36e1)
修复了
sqlite_timelimit()
偶尔无法自行清理的 bug(bac4e01)执行 pytest 时,我们不再加载额外的插件(#438)
如果数据库中少于五个表,主页现在链接到数据库视图(#373)
--cors
选项现在也对错误页面生效(#453)datasette publish heroku
现在使用--include-vcs-ignore
选项,这意味着它在 Travis CI 下工作(#407)datasette publish heroku
现在使用 Python 3.6.8 发布(666c374)将
datasette publish now
重命名为datasette publish nowv1
(#472)datasette publish nowv1
现在接受多个--alias
参数(09ef305)移除了
datasette skeleton
命令(#476)关于如何构建文档的文档 现在推荐使用
sphinx-autobuild
0.27.1 (2019-05-09)¶
小型 bug 修复版本:不要将
tests/
安装到错误的位置。感谢 Veit Heller。
0.27 (2019-01-31)¶
新增命令:
datasette plugins
(文档)显示当前安装的插件列表。Datasette 现在可以使用新的
?_shape=array&_nl=on
查询字符串选项输出 换行符分隔的 JSON (newline-delimited JSON)。新增了关于 The Datasette Ecosystem 的文档。
官方 Datasette Docker 镜像 现在使用 Python 3.7.2 作为基础镜像。
0.26.1 (2019-01-10)¶
/-/versions
现在包含 SQLitecompile_options
(#396)datasetteproject/datasette Docker 镜像现在使用 SQLite 3.26.0(#397)
清除了 Python 3.7 下的一些弃用警告
0.26 (2019-01-02)¶
datasette serve --reload
现在在数据库文件在磁盘上发生更改时重新启动 Datasette。datasette publish now
现在接受可选的--alias mysite.now.sh
参数。这将在部署完成后尝试设置别名。修复了高级 CSV 导出表单未能包含当前选定过滤器的 bug(#393)
0.25.2 (2018-12-16)¶
0.25.1 (2018-11-04)¶
文档改进以及修复了发布到 Zeit Now 的问题。
datasette publish now
现在使用 Zeit 的 v1 平台,以解决新的 100MB 镜像限制。感谢 @slygent - 关闭 #366。
0.25 (2018-09-19)¶
新的插件钩子、改进的数据库视图支持以及使用较新版本 SQLite 的更简单方法。
新增
publish_subcommand
插件钩子。插件现在可以除了默认的now
和heroku
之外,添加额外的datasette publish
发布器,这两个默认发布器已重构为默认插件。publish_subcommand 文档。关闭 #349新增
render_cell
插件钩子。插件现在可以自定义 Datasette 可浏览界面生成的 HTML 表格中值的显示方式。datasette-json-html 和 datasette-render-images 是两个使用此钩子的新插件。render_cell 文档。关闭 #352新增
extra_body_script
插件钩子,使插件能够提供应添加到页面底部的额外 JavaScript。extra_body_script 文档。extra_css_urls
和extra_js_urls
钩子现在接受额外的可选参数,允许它们更具选择性地应用于特定页面。文档。您现在可以使用 sortable_columns metadata 设置 显式启用数据库视图以及特定表格中的按列排序功能。
新的
fts_table
和fts_pk
metadata 设置现在可用于 显式配置表格或视图的全文搜索,即使该表格在数据库 Schema 本身中未直接与 SQLite FTS 功能关联。如果当前环境中安装了 pysqlite3,Datasette 现在将使用它代替标准库的
sqlite3
模块。这使得在较新版本的 SQLite(包括刚刚发布的添加了窗口函数支持的 SQLite 3.25.0)上运行 Datasette 变得容易得多。有关如何使用此功能的更多详细信息,请参见 #360新增机制,允许使用
metadata.json
设置 插件配置选项。
0.24 (2018-07-23)¶
一些小型新特性
datasette publish heroku
现在支持--extra-options
,修复了 #334如果需要 SpatiaLite,则提供自定义错误消息,关闭 #331
修复了与 Python 3.7 的兼容性
datasette publish heroku
现在支持通过-n
选项设置应用程序名称,也可用于覆盖现有应用程序 [Russ Garrett]新增
force_https_on
配置选项,修复了部署到 Zeit Now 时https://
API URL 的问题 - 关闭 #333?_json_infinity=1
查询字符串参数,用于处理 JSON 中的 Infinity/-Infinity 值,关闭 #332自定义 SQL 查询结果中显示的 URL 现在已 URL 化,关闭 #298
0.23.2 (2018-07-07)¶
小型 bug 修复和文档发布。
0.23.1 (2018-06-21)¶
小型 bug 修复版本。
0.23 (2018-06-18)¶
此版本包含 CSV 导出、改进的外部键展开选项、新增配置设置以及对 SpatiaLite 的改进支持。
有关自上次发布以来添加的完整提交列表,请参阅 datasette/compare/0.22.1...0.23。
CSV 导出¶
任何 Datasette 表格、视图或自定义 SQL 查询现在都可以导出为 CSV。

请查看 CSV 导出文档 了解更多详细信息,或在 https://fivethirtyeight.datasettes.com/fivethirtyeight/bechdel%2Fmovies 上试用该功能
如果您的表格行数超过 max_returned_rows(默认 1,000),Datasette 提供了 *流式传输所有行* 的选项。此选项利用异步 Python 和 Datasette 高效的 分页 功能,迭代整个匹配结果集并将其流式传输为可下载的 CSV 文件。
外部键展开¶
当 Datasette 检测到外部键引用时,它会尝试解析该引用的标签(自动或使用 指定表的标签列 metadata 选项),以便显示指向相关行的链接。
现在,表格的 JSON 和 CSV 表示形式也支持此展开功能,使用新的 _labels=on
查询字符串选项。更多详细信息请参见 展开外部键引用。
新增配置设置¶
Datasette 的 设置 现在也支持布尔值设置。新增了多个配置选项:
num_sql_threads
- 用于执行 SQLite 查询的线程数。默认为 3。allow_facet
- 使用 _facet= 参数启用或禁用自定义 分面过滤。默认为 on。suggest_facets
- Datasette 是否应该建议分面过滤?默认为 on。allow_download
- 是否允许用户下载整个 SQLite 数据库?默认为 on。allow_sql
- 是否允许用户执行自定义 SQL 查询?默认为 on。default_cache_ttl
- 默认 HTTP 缓存 max-age 头(秒)。默认为 365 天 - 可以通过将其设置为 0 完全禁用缓存。cache_size_kb
- 以 KB 为单位设置 SQLite 用于其 每连接缓存 的内存量。allow_csv_stream
- 允许用户将整个结果集流式传输为单个 CSV 文件。默认为 on。max_csv_mb
- 返回的 CSV 文件的最大大小(MB)。默认为 100MB,设为 0 可禁用此限制。
使用 ?_ttl 控制 HTTP 缓存¶
现在,您可以使用新的 ?_ttl=
查询字符串参数,按 URL 自定义发送的 HTTP max-age 头部。
您可以将其设置为任意秒数值,或设置为 0 以完全禁用 HTTP 缓存。
例如,考虑这个返回随机选择的一名复仇者的查询
select * from [avengers/avengers] order by random() limit 1
由于 HTTP 缓存,如果您重复访问以下页面,您将得到相同的结果
/fivethirtyeight?sql=select+*+from+%5Bavengers%2Favengers%5D+order+by+random%28%29+limit+1
通过在 URL 中添加 ?_ttl=0,您可以确保页面不会被缓存,并且每次都能获得不同的超级英雄
/fivethirtyeight?sql=select+*+from+%5Bavengers%2Favengers%5D+order+by+random%28%29+limit+1&_ttl=0
增强的 SpatiaLite 支持¶
用于 SQLite 的 SpatiaLite 模块为数据库增加了强大的地理空间功能。
让 SpatiaLite 工作可能很棘手,特别是如果您想使用最新的 alpha 版本(支持 K 最近邻)。
Datasette 现在包含关于 SpatiaLite 的详尽文档,并且感谢 Ravi Kotecha,我们的 GitHub 仓库包含一个Dockerfile,可以构建最新的 SpatiaLite 并将其配置为与 Datasette 一起使用。
datasette publish
和 datasette package
命令现在接受一个新的 --spatialite
参数,这将使它们在部署的容器中安装和配置 SpatiaLite。
latest.datasette.io¶
现在,Travis CI 会自动将 Datasette master 的每一次提交部署到 https://latest.datasette.io/ - 确保始终有最新版本软件的实时演示。
该演示使用我们单元测试中的fixtures,确保它展示了测试所涵盖的相同功能范围。
您可以在我们的 .travis.yml 文件中查看部署机制是如何工作的。
杂项¶
您的某个列中有 JSON 数据吗?使用新的
?_json=COLNAME
参数告诉 Datasette 直接返回该 JSON 值,而不是将其编码为字符串。如果您只想获取每行第一个值的数组,请使用新的
?_shape=arrayfirst
选项 - 示例。
0.22.1 (2018-05-23)¶
错误修复版本,此外我们现在使用 versioneer 来管理我们的版本号。
0.22 (2018-05-20)¶
此版本最重要的新功能是分面。Datasette 现在可以将分面浏览应用于任何表的任何列。它还会建议可能的分面。有关更多详细信息,请参阅Datasette Facets 发布帖子。
除了在分面上所做的工作
添加了自省端点的文档
新增
--config
选项,新增--help-config
,关闭 #274删除了
datasette serve
的--page_size=
参数,转而使用datasette serve --config default_page_size:50 mydb.db
添加了新的帮助部分
$ datasette --help-config Config options: 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) sql_time_limit_ms Time limit for a SQL query in milliseconds (default=1000) default_facet_size Number of values to return for requested facets (default=30) facet_time_limit_ms Time limit for calculating a requested facet (default=200) facet_suggest_time_limit_ms Time limit for calculating a suggested facet (default=50)
仅将响应式表格样式应用于
.rows-and-column
否则它们会干扰描述中的表格,例如在 https://fivethirtyeight.datasettes.com/fivethirtyeight/nba-elo%2Fnbaallelo 上
将视图重构到新的
views/
模块中,参考 #256/-/versions
现在包含 SQLite 的fts_versions
,关闭 #252
0.21 (2018-05-05)¶
新的 JSON _shape=
选项,设置表格 _size=
的能力以及在特定列中搜索的机制。
默认测试使用更长的时限
有时在 Travis CI 的 Python 3.5 环境中,测试会失败,因为它达到了默认的 20ms SQL 时限。
测试 fixtures 现在默认使用 200ms 的时限,并且我们仅在测试查询中断的特定测试中使用 20ms 的时限。这将使我们在 Travis 中对 Python 3.5 的测试更加稳定。
支持
_search_COLUMN=text
搜索,关闭 #237在
/-/plugins
页面显示版本,关闭 #248?_size=max
选项,关闭 #249添加了
/-/versions
和/-/versions.json
,关闭 #244示例输出
{ "python": { "version": "3.6.3", "full": "3.6.3 (default, Oct 4 2017, 06:09:38) \n[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.37)]" }, "datasette": { "version": "0.20" }, "sqlite": { "version": "3.23.1", "extensions": { "json1": null, "spatialite": "4.3.0a" } } }
将
?_sql_time_limit_ms=
重命名为?_timelimit
,关闭 #242新的
?_shape=array
选项 + 对_shape
的调整,关闭 #245默认现在是
?_shape=arrays
(从lists
重命名而来)新的
?_shape=array
将返回一个对象数组作为根对象将
?_shape=object
更改为返回对象作为根对象更新了文档
FTS 表现在通过
inspect()
检测到,关闭 #240新的
?_size=XXX
查询字符串参数用于表格视图,关闭 #229还添加了所有
_special
参数的文档。此外,删除了实现
_group_count
的一些重复逻辑。如果
max_returned_rows==page_size
,则递增max_returned_rows
- 修复 #230表格元数据的新选项
hidden: True
,关闭 #239如果检测到 spatialite,则隐藏
idx_*
表,关闭 #228向自定义查询结果表添加了
class=rows-and-columns
向主表添加了 CSS 类
rows-and-columns
metadata.json
中的label_column
选项 - 关闭 #234
0.20 (2018-04-20)¶
此版本主要侧重于插件机制的新工作:插件现在可以捆绑静态资源和自定义模板,并且 datasette publish
有一个新的 --install=name-of-plugin
选项。
在自定义查询页面向 HTML 表格添加 col-X 类
修复了文档中的过时模板
插件现在可以捆绑自定义模板,#224
添加了 /-/metadata /-/plugins /-/inspect,#225
--install 选项文档,参考 #223
Datasette publish/package --install 选项,#223
修复 Python 3.5 中的插件问题,#222
新的插件钩子:extra_css_urls() 和 extra_js_urls(),#214
/-/static-plugins/PLUGIN_NAME/ 现在从插件提供 static/
<th>
现在获取 class="col-X" - 并添加了 col-X 文档使用 to_css_class 处理表格单元格列类
这确保了名称中包含空格的列仍然可以生成可用的 CSS 类名。参考 #209
向
<td>
添加列名类,加粗主键 [Russ Garrett]不要在链接列中复制简单的主要键 [Russ Garrett]
当存在简单的(单列)主要键时,在链接列中重复它看起来很奇怪。
此更改删除了第二个主键列,并将链接列视为从头部/排序角度来看的主键列。
正确转义行链接的 HTML 显示 [Russ Garrett]
test_paginate_compound_keys 的时限延长
它在 Travis 中间歇性地失败 - 参见 #209
对可下载数据库使用 application/octet-stream
更新了 PyPI 分类器
更新了 PyPI 链接到 pypi.org
0.19 (2018-04-16)¶
这是新的 Datasette 插件机制的第一个预览。目前只有两个插件钩子可用 - 用于自定义 SQL 函数和自定义模板过滤器。还有更多内容即将推出 - 如果您对目前的方向有反馈,请阅读文档并参与跟踪工单。
修复
_sort_desc=sortable_with_nulls
测试,参考 #216修复 #216 - 按可为空列排序时正确分页
插件的初步文档,关闭 #213
新的
--plugins-dir=plugins/
选项 (#212)新选项,使 Datasette 加载并评估指定目录中的所有 Python 文件,并注册这些文件中定义的任何插件。
此新选项适用于以下命令
datasette serve mydb.db --plugins-dir=plugins/ datasette publish now/heroku mydb.db --plugins-dir=plugins/ datasette package mydb.db --plugins-dir=plugins/
插件系统启动,基于 pluggy (#210)
使用最初为 py.test 项目创建的 https://pluggy.readthedocs.io/
我们从两个插件钩子开始
prepare_connection(conn)
在新创建 SQLite 连接时调用。可用于注册自定义 SQL 函数。
prepare_jinja2_environment(env)
使用 Jinja2 环境调用。可用于注册自定义模板标签和过滤器。
使用这两个钩子的示例插件可以在 https://github.com/simonw/datasette-plugin-demos 找到,或使用
pip install datasette-plugin-demos
安装参考 #14
在 InvalidUsage 时返回 HTTP 405 而不是 500。[Russ Garrett]
这也可以防止它填满日志。目前 HEAD 请求会发生这种情况 - 也许应该更好地处理,但那是另一个问题。
0.18 (2018-04-14)¶
此版本引入了 单位支持,由 Russ Garrett 贡献(#203)。您现在可以使用 metadata.json
可选地指定特定列的单位。一旦指定,单位将显示在您表格的 HTML 视图中。它们也可以用于过滤器 - 如果列配置了距离单位,您可以请求该列小于 50 米或大于 20 英尺的所有行。
链接没有标签的外键。[Russ Garrett]
这会将无标签的外键渲染为简单的链接。
还包括对两个小问题的额外修复
在外键链接 href 中,主键使用 HTML 转义而不是 URL 转义进行转义。这破坏了一些非整数主键。
处理 500 错误时将回溯信息打印到控制台。
修复加载没有传入外键的行时出现的 SQLite 错误。[Russ Garrett]
这修复了加载传入外键时由无效查询引起的错误。
由于异步,该错误被忽略,但仍然打印到控制台。
允许使用 Pint 注册自定义单位。[Russ Garrett]
支持过滤器中的单位。[Russ Garrett]
整理单位支持。[Russ Garrett]
将单位添加到导出的 JSON
元数据骨架中的 Units 键
文档
初始单位支持。[Russ Garrett]
添加对在
metadata.json
中指定列单位的支持,并使用 pint 在显示时进行渲染
0.17 (2018-04-13)¶
发布 0.17 以修复 PyPI 问题
0.16 (2018-04-13)¶
更好的错误处理机制;针对缺失表格/数据库返回 404
新的错误机制关闭 #193
针对缺失表格/数据库返回 404,关闭 #184
新 PyPI 的 markdown 格式 long_description
隐藏 SpatiaLite 系统表。[Russ Garrett]
允许
explain select
/explain query plan select
#201Datasette inspect 现在查找 primary_keys #195
允许使用表单字段进行排序(用于移动端竖屏模式)#199
我们现在将排序选项显示为一个选择框和一个降序复选框,这意味着即使在隐藏列标题的移动端竖屏模式下,您也可以应用排序顺序。
0.15 (2018-04-09)¶
此版本最大的新功能是按列排序的功能。在表格页面上,现在可以点击列标题以应用排序(或降序排序),或者您可以在 URL 中直接指定 ?_sort=column
或 ?_sort_desc=column
。
table_rows
=>table_rows_count
,filtered_table_rows
=>filtered_table_rows_count
重命名属性。关闭 #194
metadata.json
中新的sortable_columns
选项用于控制排序选项。您现在可以使用
metadata.json
明确设置表格中哪些列可以通过_sort
和_sort_desc
参数进行排序。{ "databases": { "database1": { "tables": { "example_table": { "sortable_columns": [ "height", "weight" ] } } } } }
参考 #189
列标题现在链接到排序/降序排序 - 参考 #189
表格视图的
_sort
和_sort_desc
参数允许基于指定列进行分页排序结果。
参考 #189
即使应用了
_next
,总行数现在也正确使用 .custom_sql() 实现 _group_count (参考 #150)
使查询模板中的 HTML 标题更具可读性(#180)[Ryan Pitts]
JSON API 新的
?_shape=objects/object/lists
参数(#192)新的
_shape=
参数取代了旧的.jsono
扩展名现在不再是这样
/database/table.jsono
我们像这样使用
_shape
参数/database/table.json?_shape=objects
还引入了一个新的
_shape
称为object
,它看起来像这样/database/table.json?_shape=object
为 rows 键返回一个对象
... "rows": { "pk1": { ... }, "pk2": { ... } }
参考 #122
将测试数据库 fixtures 写入 .db 文件的工具
python tests/fixtures.py /tmp/hello.db
这对于创建一个 SQLite 数据库的测试 fixtures 以进行交互式探索非常有用。
复合主键
_next=
现在与额外过滤器配合良好关闭 #190
修复了复合主键上的 keyset 分页错误
参考 #190
数据库/表格视图继承
source/license/source_url/license_url
元数据如果在根元数据中设置了
source_url/license_url/source/license
字段,这些值现在将一直继承到数据库和表格模板。title/description
不会被继承。还添加了为元数据生成的 HTML 的单元测试。
参考 #185
将元数据(如果存在)添加到 heroku 临时目录(#178)[Tony Hirst]
分页初步文档
将 test_app 拆分为 test_api 和 test_html
修复了 .json 路径正则表达式错误
我有一个名为
geojson
的表,它导致了一个异常,因为正则表达式匹配的是.json
而不是\.json
使用 Python 3.6.3 部署到 Heroku
0.14 (2017-12-09)¶
此版本的主题是定制:Datasette 现在允许其呈现的各个方面进行定制,可以使用额外的 CSS 或提供全新的模板。
Datasette 的metadata.json 格式也得到了扩展,允许按数据库和按表格设置元数据。可以使用新的 datasette skeleton
命令生成一个骨架 JSON 文件,准备好填充数据库和表格的详细信息。
metadata.json
文件还可以用于定义预设查询,作为 SQL 视图的更强大替代方案。
元数据中的
extra_css_urls
/extra_js_urls
在
metadata.json
格式中添加自定义 CSS 和 JS URL 的机制。创建一个如下所示的
metadata.json
文件{ "extra_css_urls": [ "https://simonwillison.net/static/css/all.bf8cd891642c.css" ], "extra_js_urls": [ "https://code.jqueryjs.cn/jquery-3.2.1.slim.min.js" ] }
然后像这样启动 datasette
datasette mydb.db --metadata=metadata.json
CSS 和 JavaScript 文件将链接到每个页面的
<head>
中。您还可以为这些资产指定 SRI(子资源完整性哈希)
{ "extra_css_urls": [ { "url": "https://simonwillison.net/static/css/all.bf8cd891642c.css", "sri": "sha384-9qIZekWUyjCyDIf2YK1FRoKiPJq4PHt6tp/ulnuuyRBvazd0hG7pWbE99zvwSznI" } ], "extra_js_urls": [ { "url": "https://code.jqueryjs.cn/jquery-3.2.1.slim.min.js", "sri": "sha256-k2WSCIexGzOj3Euiig+TlR8gA0EmPjuc79OEeY5L45g=" } ] }
现代浏览器只有在 SRI 哈希与提供的內容匹配时才会执行样式表或 JavaScript。您可以使用 https://www.srihash.org/ 生成哈希值。
看起来像 URL 的列值自动链接(#153)
身体上带有类的 CSS 样式钩子(#153)
每个模板现在在 body 中都带有旨在支持自定义样式的 CSS 类。
索引模板(位于
/
的顶级页面)获取这个<body class="index">
数据库模板(
/dbname/
)获取这个<body class="db db-dbname">
表格模板(
/dbname/tablename
)获取<body class="table db-dbname table-tablename">
行模板(
/dbname/tablename/rowid
)获取<body class="row db-dbname table-tablename">
如果数据库或表名是有效的 CSS 标识符,则
db-x
和table-x
类将使用这些名称本身。如果不是,我们将剥离所有无效字符,并附加原始名称的 6 个字符的 md5 摘要,以确保解析为相同剥离字符版本的多个表仍然具有不同的 CSS 类。一些示例(从单元测试中提取)
"simple" => "simple" "MixedCase" => "MixedCase" "-no-leading-hyphens" => "no-leading-hyphens-65bea6" "_no-leading-underscores" => "no-leading-underscores-b921bc" "no spaces" => "no-spaces-7088d7" "-" => "336d5e" "no $ characters" => "no--characters-59e024"
datasette --template-dir=mytemplates/
参数您现在可以传递一个额外的参数,指定要查找自定义模板的目录。
如果在该目录中找不到模板,Datasette 将回退到默认模板。
能够覆盖单个表/数据库的模板。
现在可以按数据库/按行或按表覆盖模板。
当您访问例如
/mydatabase/mytable
时,Datasette 将查找以下内容- table-mydatabase-mytable.html - table.html
如果您向 datasette serve 提供了
--template-dir
参数,它将首先在该目录中查找。查找规则如下:
Index page (/): index.html Database page (/mydatabase): database-mydatabase.html database.html Table page (/mydatabase/mytable): table-mydatabase-mytable.html table.html Row page (/mydatabase/mytable/id): row-mydatabase-mytable.html row.html
如果表名中包含空格或其他意外字符,模板文件名将遵循与我们自定义
<body>
CSS 类相同的规则 - 例如,名为“Food Trucks”的表将尝试加载以下模板table-mydatabase-Food-Trucks-399138.html table.html
可以使用 Jinja 模板继承来扩展默认模板。如果您想使用一些附加内容自定义 EVERY 行模板,可以通过创建如下所示的 row.html 模板来实现
{% extends "default:row.html" %} {% block content %} <h1>EXTRA HTML AT THE TOP OF THE CONTENT BLOCK</h1> <p>This line renders the original block:</p> {{ super() }} {% endblock %}
datasette serve 的
--static
选项(#160)您现在可以告诉 Datasette 从特定位置的特定挂载点提供静态文件。
例如
datasette serve mydb.db --static extra-css:/tmp/static/css
现在如果您访问此 URL
http://localhost:8001/extra-css/blah.css
将提供以下文件
/tmp/static/css/blah.css
预设查询支持。
现在可以在
metadata.json
中定义命名预设查询,如下所示{ "databases": { "timezones": { "queries": { "timezone_for_point": "select tzid from timezones ..." } } } }
这些将显示在数据库页面上“视图”下方的新“查询”部分中。
用于生成
metadata.json
的新datasette skeleton
命令(#164)对按表/按数据库元数据的
metadata.json
支持(#165)还增加了对 descriptions 和 HTML descriptions 的支持。
这是一个 metadata.json 文件示例,说明了自定义的按数据库和按表格元数据
{ "title": "Overall datasette title", "description_html": "This is a <em>description with HTML</em>.", "databases": { "db1": { "title": "First database", "description": "This is a string description & has no HTML", "license_url": "http://example.com/", "license": "The example license", "queries": { "canned_query": "select * from table1 limit 3;" }, "tables": { "table1": { "title": "Custom title for table1", "description": "Tables can have descriptions too", "source": "This has a custom source", "source_url": "http://example.com/" } } } } }
将
datasette build
命令重命名为datasette inspect
(#130)升级到 Sanic 0.7.0(#168)
package 和 publish 命令现在接受
--static
和--template-dir
示例用法
datasette package --static css:extra-css/ --static js:extra-js/ \ sf-trees.db --template-dir templates/ --tag sf-trees --branch master
这将创建一个本地 Docker 镜像,其中包含 templates/、extra-css/ 和 extra-js/ 目录的副本。然后您可以像这样运行它
docker run -p 8001:8001 sf-trees
发布到 Zeit now
datasette publish now --static css:extra-css/ --static js:extra-js/ \ sf-trees.db --template-dir templates/ --name sf-trees --branch master
显示页面考虑了哪些模板的 HTML 注释(#171)
0.13 (2017-11-24)¶
搜索现在应用于当前过滤器。
将搜索与过滤器合并到同一个表单中。
关闭 #133
表格视图头部设计更加整洁。
关闭 #147
添加了
?column__not=blah
过滤器。关闭 #148
行页面现在解析外键。
关闭 #132
进一步调整选择/输入过滤器的样式。
参考 #86 - 感谢 @natbat 的帮助!
在表格单元格中显示链接的外键。
添加了编辑表格过滤器的 UI。
参考 #86
在索引页面上隐藏 FTS 创建的表。
关闭 #129
添加发布到 heroku 的支持 [Jacob Kaplan-Moss]
datasette publish heroku mydb.db
拉取请求 #104
?_group_count=column
的初步实现。按一列或多列分组计数行的 URL 快捷方式。
?_group_count=column1&_group_count=column2
同样有效。生成的 SQL 看起来像这样
select "qSpecies", count(*) as "count" from Street_Tree_List group by "qSpecies" order by "count" desc limit 100
或者对于两列,像这样
select "qSpecies", "qSiteInfo", count(*) as "count" from Street_Tree_List group by "qSpecies", "qSiteInfo" order by "count" desc limit 100
参考 #44
向 datasette publish 和 package 添加了
--build=master
选项。datasette publish
和datasette package
命令现在都接受可选的--build
参数。如果提供,可用于指定发布到 GitHub 的分支,该分支将被构建到容器中。这使得测试尚未正式发布到 PyPI 的代码变得更容易,例如
datasette publish now mydb.db --branch=master
如果检测到 FTS 表,则实现
?_search=XXX
+ UI。关闭 #131
添加了
datasette --version
支持。如果可能,表格视图现在显示展开的外键引用。
如果一个表具有外键列,并且这些外键表具有
label_columns
,则 TableView 现在将查询这些其他表以获取相应的键值,并在相应的表格单元格中将其显示为链接。label_columns
当前由inspect()
函数检测,该函数查找任何只有两列的表 - 一个 ID 列和另一个列 - 并将label_column
设置为该第二个非 ID 列。不要阻止标签切换到“Run SQL”按钮(#117)[Robert Gieseke]
参见 #115 中的评论
添加执行 SQL 查询的键盘快捷键(#115)[Robert Gieseke]
允许通过环境变量设置
--load-extension
。添加对
?field__isnull=1
的支持(#107)[Ray N]添加 spatialite,切换到 debian 和本地构建(#114)[Ariel Núñez]
向 datasette serve 添加了
--load-extension
参数。允许加载 SQLite 扩展。参考 #110。
0.12 (2017-11-16)¶
添加了
__version__
,现在在页面页脚以工具提示形式显示(#108)。添加了初步文档,包括更新日志(#99)。
开启了 Jinja 中的自动转义。
添加了用于编辑命名参数的 UI(#96)。
您现在可以使用 SQLite 命名参数(例如
:name
)构造自定义 SQL 语句,并且 datasette 将显示用于编辑这些参数的表单字段。这里有一个示例,它允许您查看在澳大利亚各种狗注册方案中注册的不同品种狗的最受欢迎的名字。
固定到特定的 Jinja 版本。(#100)。
默认为 127.0.0.1 而不是 0.0.0.0。(#98)。
向 publish 和 package 命令添加了额外的元数据选项。(#92)。
您现在可以像这样运行这些命令
datasette now publish mydb.db \ --title="My Title" \ --source="Source" \ --source_url="http://www.example.com/" \ --license="CC0" \ --license_url="https://creativecommons.org/publicdomain/zero/1.0/"
这将把这些值写入与应用程序一起打包的 metadata.json 中。如果您同时传递
--metadata=metadata.json
,该文件将在写入 Docker 镜像之前使用额外的值进行更新。添加了生产就绪的 Dockerfile(#94)[Andrew Cutler]
数据库和表格页面新参数
?_sql_time_limit_ms=10
(#95)使用 Codemirror 进行 SQL 语法高亮(#89)[Tom Dyson]
0.11 (2017-11-14)¶
添加了
datasette publish now --force
选项。这将使用
--force
调用now
- 这很有用,因为它意味着即使 Now 已经缓存了该 docker 层,您也能获得 datasette 的新副本。在容器中运行时默认启用
--cors
。
0.10 (2017-11-14)¶
修复了 #83 - 单个行页面上的 500 错误。
停止在我们的测试中使用 sqlite WITH RECURSIVE。
在 Travis CI 中运行的 Python 3 版本不支持此功能。
0.9 (2017-11-13)¶
添加了
--sql_time_limit_ms
和--extra-options
。serve 命令现在接受
--sql_time_limit_ms
以自定义 SQL 时限。publish 和 package 命令现在接受
--extra-options
,可用于指定在生成的 Docker 容器中执行 datasite serve 命令时要传递的附加选项。
0.8 (2017-11-13)¶
V0.8 - 添加了 PyPI 元数据,准备发布。
实现了视图的 offset/limit 分页(#70)。
改进了分页。(#78)
限制最大返回行数,由
--max_returned_rows
选项控制。(#69)如果有人对一个包含一百万行的表执行“select * from table”,我们可能会遇到问题:仅仅将如此大量的数据序列化为 JSON 可能会导致服务器锁定。
解决方案:我们现在对查询可返回的最大行数设定了硬限制。如果超出该限制,服务器将在 JSON 中返回
"truncated": true
字段。此限制可以通过新的
--max_returned_rows
选项进行可选控制。将该选项设置为 0 将完全禁用此限制。