更改日志

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)

  • 安全改进:404 页面过去会反射 URL 路径中的内容,这可能被用于向 Datasette 用户显示误导性信息。404 错误不再显示来自 URL 的额外信息。 (#2359)

  • 回溯移植了一个更好的修复,用于正确地从针对 SQLite 3.46.0 的预设查询 SQL 中提取命名参数。 (#2353)

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)

  • 添加了 pipsetuptools 作为显式依赖。这修复了无法使用 Rye 安装 Datasette 的 bug。 (#2065)

0.64.2 (2023-03-08)

  • 修复了 datasette publish cloudrun 的一个 bug,即所有部署都使用了相同的 Docker 镜像标签。这通常影响不大,因为服务在镜像推送到注册表后会立即部署,但如果两个不同服务的两个不同部署同时运行,可能会导致部署错误的镜像。 (#2036)

0.64.1 (2023-01-11)

  • 文档现在链接到安装 Python 3 的最新信息来源。 (#1987)

  • 错误地使用 Datasette("path/to/data.db") 而不是 Datasette(["path/to/data.db"]) 调用 Datasette 构造函数时,现在会返回一个有用的错误消息。 (#1985)

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 publishdatasette package 使用的 Docker 容器现在都使用该版本的 Python。 (#1853)

  • --load-extension 选项现在支持入口点。感谢 Alex Garcia。 (#1789)

  • 现在可以使用新的 facet_size 表元数据选项按表设置分面大小。 (#1804)

  • truncate_cells_html 设置现在也影响列中的长 URL。 (#1805)

  • 非 JavaScript SQL 编辑器文本区域现在会增加高度以适应 SQL 查询。 (#1786)

  • 分面现在在长值中显示时具有更好的换行。感谢 Daniel Rech。 (#1794)

  • 配置目录模式 中使用的 settings.json 文件现在在启动时进行验证。 (#1816)

  • SQL 查询现在可以包含开头的 SQL 注释,使用 /* ... */-- ... 语法。感谢 Charles Nepote。 (#1860)

  • 当 SQL 查询因时间限制错误而终止时,现在会重新显示该查询。 (#1819)

  • 检查数据 机制现在用于加速服务器启动 - 感谢 Forest Gregg。 (#1834)

  • 配置目录模式 中,文件名以 .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)

文档

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 cloudrundatasette 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 修复

  • 如果不允许分面,则不在齿轮菜单中显示分面选项。 (#1683)

  • ?_sort?_sort_desc 现在可用,即使正在排序的列已使用 ?_col=?_nocol= 从查询中排除。 (#1773)

  • 修复了每次点击应用按钮时 ?_sort_desc 在 URL 中重复的 bug。 (#1738)

文档

  • 文档中的示例现在包含复制到剪贴板按钮。 (#1748)

  • 文档现在使用 Furo Sphinx 主题。 (#1746)

  • 文档中的代码示例现在全部使用 Black 进行格式化。 (#1718)

  • Request.fake() 方法现在已记录,请参见 Request 对象

  • 面向插件作者的新文档:在测试期间注册插件。 (#903)

0.61.1 (2022-03-23)

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)

  • Datasette 现在遵循 行为准则。 (#1654)

  • 不再支持 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_licensesKNNKNN2 现在默认隐藏。 (#1601)

  • SQL 查询跟踪机制现在适用于在 asyncio 子任务中执行的查询,例如由 asyncio.gather() 创建的任务。 (#1576)

  • datasette.tracer 机制现在已记录。

  • 现在可以直接从顶层 datasette 包导入常用的 Datasette 符号,参见 导入快捷方式。这些符号是 ResponseForbiddenNotFoundhookimplactor_matches_allow。 (#957)

  • /-/versions 页面现在返回 SpatiaLite 使用的库的额外详细信息。 (#1607)

  • 文档现在链接到 Datasette 教程

  • Datasette 现在也会在 /opt/homebrew 中查找 SpatiaLite - 感谢 Dan Peterson。 (#1649)

  • 修复了 自定义页面 在 Windows 上不起作用的 bug。感谢 Robert Christie。 (#1545)

  • 修复了表中有名为 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)

插件和内部机制

分面

  • 分面中的唯一值数量现在总是显示。之前只有用户指定了 ?_facet_size=max 时才显示。 (#1556)

  • 类型为 datearray 的分面现在可以在 metadata.json 中配置,参见 metadata.json 中的分面。感谢 David Larlet。 (#1552)

  • 表格视图新增 ?_nosuggest=1 参数,用于禁用分面建议。 (#1557)

  • 修复了 ?_facet_array=tags&_facet=tags 只显示两个选定分面中的一个的 bug。 (#625)

其他小修复

  • 对 Datasette 首次启动时运行的数据库 schema 内省代码进行了几项性能改进。 (#1555)

  • 现在对外键检测到的标签列不区分大小写,因此 NameTITLE 将与 nametitle 以相同方式检测。 (#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)

  • 修复了带下划线前缀的列无法从交互式过滤器列表中移除的 bug。 (#1527)

  • 修复了带下划线前缀的列未被行页面上的“来自其他表的链接”接口正确链接的 bug。 (#1525)

  • 升级了依赖项 aiofilesblackjanus

0.59.3 (2021-11-20)

  • 修复了在使用 base_url 设置并在带前缀 URL 路径的代理后运行 Datasette 时的大量 bug。此模式的实时演示现在可在 datasette-apache-proxy-demo.datasette.io/prefix/ 获取。 (#1519, #838)

  • ?column__arraycontains=?column__arraynotcontains= 表参数现在也适用于 SQL 视图。 (#448)

  • 如果列包含相同值多次,?_facet_array=column 不再返回不正确的计数。

0.59.2 (2021-11-13)

  • 列名带下划线前缀的现在用作分面时可以正确工作。 (#1506)

  • ?_nocol= 应用于列不再从过滤界面中移除该列。 (#1503)

  • 官方 Datasette Docker 镜像现在使用 Debian Bullseye 作为基础镜像。 (#1497)

  • Datasette 今天四岁了!这是 2017 年的 原始发布公告

0.59.1 (2021-10-24)

  • 修复了与 Python 3.10 的兼容性问题。 (#1482)

  • 关于如何使用带有整数和浮点值的 命名参数 的文档。 (#1496)

0.59 (2021-10-14)

  • 列现在可以在 metadata.json 中具有关联的元数据描述,参见 列描述。 (#942)

  • 新增插件钩子: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)

  • 新增 hide_sql 预设查询选项,默认隐藏预设查询使用的 SQL 查询,参见 附加预设查询选项。 (#1422)

  • datasette publish cloudrun 新增 --cpu 选项。 (#1420)

  • 如果 Rich 安装在与 Datasette 相同的虚拟环境中,它将用于在控制台上提供增强的错误追踪显示。 (#1416)

  • datasette.utilsparse_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)

0.57.1 (2021-06-08)

  • 修复了全局导航菜单的视觉显示故障。 (#1367)

  • 不再截断 /database 页面上显示的表格列列表。 (#1364)

0.57 (2021-06-05)

警告

此版本修复了 ?_trace=1 功能中存在的 反射型跨站脚本 安全漏洞。您应尽快升级到此版本,或升级到 Datasette 0.56.1。(#1360

除安全修复外,此版本还包括用于控制表显示列的 ?_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

错误修复及其他改进

  • 自定义页面 现在与 base_url 设置结合使用时可以正常工作。(#1238

  • 修复了用户没有权限访问其中一个表时,显示索引页面的间歇性错误。感谢 Guy Freeman。(#1305

  • 名称为 "Link" 的列不再被错误地显示为粗体。(#1308

  • 修复了因表名中包含单引号导致的错误。(#1257

  • 更新了依赖:pytest-asyncioBlackjinja2aiofilesclickitsdangerous

  • Datasette 官方 Docker 镜像现在支持 apt-get install。(#1320

  • datasette publish heroku 使用的 Heroku 运行时现在是 python-3.8.10

0.56.1 (2021-06-05)

警告

此版本修复了 ?_trace=1 功能中存在的 反射型跨站脚本 安全漏洞。您应尽快升级到此版本,或升级到 Datasette 0.57。(#1360

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

  • 显示在表格单元格中的 HTML 列表现在样式正确。感谢 Bob Whitelock。(#1141#1252

  • 配置目录模式现在可以正确地提供 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 中引入,并提供 importexport 关键字的原生浏览器支持。

要使用模块,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

  • 新的 ?_header=off 选项用于 CSV 导出,该选项省略了 CSV 标题行,在此处记录。(#1133

  • 页脚中的“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)

  • 如果在安装了 pysqlite3 的情况下,在 /-/versions 页面上显示 pysqlite3 版本。(#1125

  • Datasette 输出的错误(例如无效 SQL 查询的错误)现在输出到 stderr,而不是 stdout。(#1131

  • 修复了 Windows 上因不必要的 from os import EX_CANTCREAT 导致的启动错误 - 感谢 Abdussamet Koçak。(#1094

0.52.3 (2020-12-03)

  • 修复了 Datasette 安装在 ARM Amazon Linux 上时,静态资源返回 404 错误的错误。(#1124

0.52.2 (2020-12-02)

  • 正确显示了 SQLite 3.31.0 或更高版本生成的列。(#1116

  • 如果检测到扩展程序在常用位置可用,尝试打开 SpatiaLite 数据库时,错误消息现在建议使用 --load-extension=spatialite。(#1115

  • 针对 /database 页面的 OPTIONS 请求不再引发 500 错误。(#1100

  • 大于 32MB 并发布到 Cloud Run 的数据库现在可以下载。(#749

  • 修复了表格和数据库页面上齿轮图标未对齐的错误。感谢 Abdussamet Koçak。(#1121

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

  • 配置目录模式 中的 config.json 文件现在名为 settings.json。(#1104

  • 未记录的 datasette.config() 内部方法已被记录的 .setting(key) 方法取代。(#1107

此版本中还包括

以及一些错误修复

  • 链接到带有空白标签列的行的外键现在显示为连字符,允许点击这些链接。(#1086

  • 修复了底层查询超出时间限制时,行页面有时会返回 500 错误的错误。(#1088

  • 修复了表格操作菜单有时会部分被页面边缘遮挡的错误。(#1084

0.51.1 (2020-10-31)

0.51 (2020-10-31)

全新的视觉设计,用于添加导航选项的插件钩子,更好的二进制数据处理,URL 构建实用方法以及更好的代理后运行 Datasette 支持。

新的视觉设计

Datasette 不再是白色和灰色搭配蓝色和紫色链接了!Natalie Downe 一直致力于视觉刷新,此版本中包含了第一次迭代。(#1056

Screenshot showing Datasette's new visual look

二进制数据

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

  • 修复了纵向移动视图中列标题的两个渲染错误。(#978#980

  • 新的 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

  • 现在记录了自定义错误页面,请参阅 自定义错误页面。(#965

0.48 (2020-08-16)

  • Datasette 文档现在位于 docs.datasette.io

  • db.is_mutable 属性现在已记录和测试,请参阅 数据库自省

  • extra_template_varsextra_css_urlsextra_js_urlsextra_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)

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-plugindatasette uninstall name-of-plugin。这些命令等同于 pip installpip 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 包现在包含 sdistbdist_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

  • 插件 介绍了 Datasette 的插件系统以及如何安装和配置插件。

  • 编写插件 描述了如何编写插件,从一次性单文件插件到可发布到 PyPI 的打包插件。它还描述了如何使用新的 datasette-plugin cookiecutter 模板来启动一个插件。

  • 插件钩子 是 Datasette 每个插件钩子的详细文档的完整列表。

  • 测试插件 描述了如何使用 pytestHTTPX 为 Datasette 插件编写测试。

新的插件钩子

较小的更改

  • 级联视图权限 - 如果用户拥有 view-table 权限,即使没有 view-databaseview-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

  • Datasette 现在创建单个 请求对象 并在当前 HTTP 请求的整个生命周期中使用它。(#870

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 引入了预设查询执行 INSERTUPDATE 查询的能力,使用新的 "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 publishdatasette 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 scopesendreceive 对象。

  • 较小的更改

  • 关于 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() 重复。

  • 新增 await datasette.permission_allowed() 方法。

  • 新增 /-/actor 调试端点,用于查看当前已认证的用户(actor)。

  • 新增 request.cookies 属性。

  • /-/plugins 端点现在显示每个插件实现的钩子列表,例如 https://latest.datasette.io/-/plugins?all=1

  • request.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-atomdatasette-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.8 shutil.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-typetext/html; charset=utf-8"。(#752

  • Datasette 现在处理 ASGI raw_path 值为 None 的情况,这应该允许与 Mangum 适配器兼容,用于在 AWS Lambda 上运行 ASGI 应用程序。感谢 Colin Dellow。(#719

  • 安装文档现在包含了如何 使用 pipx 的说明。(#756

  • 改进了 全文搜索 的文档。(#748

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)

  • 新增 base_url 配置设置,用于在以不同 URL 前缀运行时提供正确的链接。(#394

  • 新增 metadata 设置 "sort""sort_desc",用于设置表的默认排序顺序。参见 设置默认排序顺序。(#702

  • 排序方向箭头现在默认显示在主键上。这意味着您只需单击一次(而不是两次)即可按倒序排序。(#677

  • 新增 await Request(scope, receive).post_vars() 方法,用于访问 POST 表单变量。(#700

  • Plugin hooks 文档现在链接到每个插件的示例用法。(#709

0.38 (2020-03-08)

  • Datasette 的 Docker 构建 现在使用 SQLite 3.31.1,从 3.26 升级。(#695

  • datasette publish cloudrun 现在接受可选的 --memory=2Gi 标志,用于将 Cloud Run 分配的内存设置为默认值(256Mi)以外的值。(#694

  • 修复了插件自带的模板有时无法正确加载的 bug。(#697

0.37.1 (2020-03-02)

0.37 (2020-02-25)

  • 插件现在拥有一个支持写入数据库的机制,使用新的 .execute_write().execute_write_fn() 方法。文档。(#682

  • 使用 inspect 命令计算过行数的不可变数据库现在更有效地使用了计算出的行数——感谢 Kevin Keogh。(#666

  • 如果数据库文件被修改,除非该数据库以 -i 不可变模式打开,否则 --reload 不再重启服务器。(#494

  • 新增 ?_searchmode=raw 选项,关闭 ?_search= 中 FTS 查询的转义,允许充分使用 SQLite 的 FTS5 查询语法。(#676

0.36 (2020-02-21)

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)

  • 修复了 datasette publish heroku 应用程序无法启动的 bug(#633

  • 修复了仅使用 --source_urldatasette publish 的 bug——感谢 Stanley Zheng(#572

  • 部署到 Heroku 现在使用 Python 3.8.0(#632

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)

  • /-/plugins 页面现在使用发行版名称(例如 datasette-cluster-map),而不是底层 Python 包的名称(datasette_cluster_map)(#606

  • 现在只建议对包含字符串数组的列进行数组分面过滤(#562

  • 改进了 --host 参数的文档(#574

  • 对于可空的外部键,不显示带有断开链接的 None 作为标签(#406

0.30.1 (2019-10-30)

  • 修复了隐藏表单字段中未保留 ?_where= 参数的 bug(#604

  • 修复了行页面的 .JSON 表示形式的 bug——感谢 Chris Shaw(#603

0.30 (2019-10-18)

  • 新增 /-/threads 调试页面

  • 允许 EXPLAIN WITH...#583

  • 新增格式化 SQL 按钮——感谢 Tobias Kunze(#136

  • 按参数顺序对主页上的数据库进行排序——感谢 Tobias Kunze(#585

  • 在自定义 SQL 查询页面上显示 metadata 脚注——感谢 Tobias Kunze(#589

  • publish cloudrun 使用 --platform=managed#587

  • 修复了在 CSV 中返回非 ASCII 字符的 bug(#584

  • 修复了 /foo/foo-bar 的 bug(#601

0.29.3 (2019-09-02)

  • 修复了数据库页面上 CodeMirror 的实现(#560

  • 文档拼写错误修复——感谢 Min ho Kim(#561

  • 如果表名使用了其他转义机制,检测表是否启用了 FTS 的机制现在也能工作(#570)——为了与 sqlite-utils 的近期更改 兼容。

0.29.2 (2019-07-13)

  • Uvicorn 升级到 0.8.4,修复了查询字符串未包含在服务器日志中的 bug。(#559

  • 修复了自定义查询页面上导航面包屑显示不正确的 bug。(#558

  • 修复了包含 unicode 字符的自定义查询名称导致错误的 bug。

0.29.1 (2019-07-11)

  • 修复了使用相对路径的静态挂载可能导致遍历漏洞的 bug(#555)——感谢 Abdussamet Kocak!

  • Datasette 现在可以作为模块运行:python -m datasette#556)——感谢 Abdussamet Kocak!

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 到 0.29 之间的完整提交列表

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

  • 您现在可以指定 aboutabout_url metadata(除了 sourcelicense),链接到项目的更多信息——参见 Source, license and about

  • 新增 ?_trace=1 参数,现在添加调试信息,显示构建页面时执行的每个 SQL 查询(#435

  • datasette inspect 现在只计算表格行数,不再检查其他数据库 metadata(#462

  • 彻底移除了 /-/inspect 页面——未来将替换为类似的功能,参见 #465

  • Datasette 现在可以针对内存中的 SQLite 数据库运行。您可以通过不传递任何文件来启动它,或者使用 datasette serve 的新 --memory 选项来实现。这对于实验性地执行不访问任何数据的 SQLite 查询非常有用,例如 SELECT 1+1SELECT 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)

0.26.1 (2019-01-10)

  • /-/versions 现在包含 SQLite compile_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 插件钩子。插件现在可以除了默认的 nowheroku 之外,添加额外的 datasette publish 发布器,这两个默认发布器已重构为默认插件。publish_subcommand 文档。关闭 #349

  • 新增 render_cell 插件钩子。插件现在可以自定义 Datasette 可浏览界面生成的 HTML 表格中值的显示方式。datasette-json-htmldatasette-render-images 是两个使用此钩子的新插件。render_cell 文档。关闭 #352

  • 新增 extra_body_script 插件钩子,使插件能够提供应添加到页面底部的额外 JavaScript。extra_body_script 文档

  • extra_css_urlsextra_js_urls 钩子现在接受额外的可选参数,允许它们更具选择性地应用于特定页面。文档

  • 您现在可以使用 sortable_columns metadata 设置 显式启用数据库视图以及特定表格中的按列排序功能。

  • 新的 fts_tablefts_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

  • 新增配置选项:truncate_cells_html 用于在 HTML 视图中 截断长单元格值 - 关闭 #330

  • datasette publish 和 datasette package 的文档,关闭 #337

  • 修复了与 Python 3.7 的兼容性

  • datasette publish heroku 现在支持通过 -n 选项设置应用程序名称,也可用于覆盖现有应用程序 [Russ Garrett]

  • 现在可以为 预设 SQL 查询 设置标题和描述 metadata,关闭 #342

  • 新增 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 修复和文档发布。

  • CSV 导出现在遵守 --cors,修复了 #326

  • 安装说明,包括 docker 镜像 - 关闭 #328

  • 修复了包含 / 的表的行页面问题,关闭 #325

0.23.1 (2018-06-21)

小型 bug 修复版本。

  • 在 HTML 表格中正确显示空字符串,关闭 #314

  • 允许数据库文件名中包含 ".",关闭 #302

  • 以斜杠结尾的 404 页面重定向以移除斜杠,关闭 #309

  • 修复了复合主键带有外部键引用的显示不正确问题。关闭 #319

  • 使用 || 连接符的预设 SQL 查询的文档 + 示例。关闭 #321

  • 正确显示值为 0 的分面,关闭 #318

  • 高级 CSV 导出中默认勾选“展开标签”

0.23 (2018-06-18)

此版本包含 CSV 导出、改进的外部键展开选项、新增配置设置以及对 SpatiaLite 的改进支持。

有关自上次发布以来添加的完整提交列表,请参阅 datasette/compare/0.22.1...0.23

CSV 导出

任何 Datasette 表格、视图或自定义 SQL 查询现在都可以导出为 CSV。

Advanced export form. You can get the data in different JSON shapes, and CSV options are download file, expand labels and stream all rows.

请查看 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 publishdatasette 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 来管理我们的版本号。

  • 分面不再破坏分页,修复 #282

  • 添加派生自 __version____version_info__ [Robert Gieseke]

    如果发布后有提交,这可能是一个包含两个以上值(主版本和次版本)的元组。

  • 使用 Versioneer 添加版本号支持。[Robert Gieseke]

    Versioneer 许可:公共领域 (CC0-1.0)

    关闭 #273

  • 重构 inspect 逻辑 [Russ Garrett]

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

  • SQLite 全文搜索支持文档,关闭 #253

  • /-/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

    https://docs.datasette.com.cn/en/stable/plugins.html

  • 新的 --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 #201

  • Datasette inspect 现在查找 primary_keys #195

  • 允许使用表单字段进行排序(用于移动端竖屏模式)#199

    我们现在将排序选项显示为一个选择框和一个降序复选框,这意味着即使在隐藏列标题的移动端竖屏模式下,您也可以应用排序顺序。

0.15 (2018-04-09)

此版本最大的新功能是按列排序的功能。在表格页面上,现在可以点击列标题以应用排序(或降序排序),或者您可以在 URL 中直接指定 ?_sort=column?_sort_desc=column

  • table_rows => table_rows_countfiltered_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-xtable-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

    https://github.com/channelcat/sanic/releases/tag/0.7.0

  • 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 publishdatasette 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 将完全禁用此限制。