变更日志

3.38 (2024-11-23)

  • 插件现在可以通过新的 return_db=True 参数复用 sqlite-utils memory CLI 命令的实现。(#643)

  • table.transform() 现在会在转换表后重新创建索引。如果由于对表的冲突性更改(例如列重命名)而无法重新创建这些索引,则会引发新的 sqlite_utils.db.TransformError 异常。感谢 Mat Miller。(#633)

  • table.search() 现在接受一个 include_rank=True 参数,使结果行具有一个显示计算出的相关性分数的 rank 列。感谢 liunux4odoo。(#628)

  • 修复了创建包含至少一个浮点列的严格表时发生的错误。这些 FLOAT 列现在也正确地创建为 REAL 类型,但仅限于严格表。(#644)

3.37 (2024-07-18)

  • create-tableinsert-files 命令现在都接受多个 --pk 选项来指定复合主键。(#620)

  • 现已针对 Python 3.13 预发布版进行测试。(#619)

  • 修复了在 numpy 安装损坏的环境中可能发生的崩溃,该崩溃会产生 module 'numpy' has no attribute 'int8' 错误。(#632)

3.36 (2023-12-07)

  • 支持在 SQLite STRICT 模式下创建表。感谢 Taj Khattra。(#344)
    • CLI 命令 create-tableinsertupsert 现在都接受 --strict 选项。

    • 可以创建表的 Python 方法 - table.create()insert/upsert/insert_all/upsert_all 现在都接受可选的 strict=True 参数。

    • The transform command and table.transform() method preserve strict mode when transforming a table.

  • The sqlite-utils create-table command now accepts str, int and bytes as aliases for text, integer and blob respectively. (#606)

3.35.2 (2023-11-03)

  • The --load-extension=spatialite option and find_spatialite() utility function now both work correctly on arm64 Linux. Thanks, Mike Coats. (#599)

  • Fix for bug where sqlite-utils insert could cause your terminal cursor to disappear. Thanks, Luke Plant. (#433)

  • datetime.timedelta values are now stored as TEXT columns. Thanks, Harald Nezbeda. (#522)

  • Test suite is now also run against Python 3.12.

3.35.1 (2023-09-08)

  • Fixed a bug where table.transform() would sometimes re-assign the rowid values for a table rather than keeping them consistent across the operation. (#592)

3.35 (2023-08-17)

Adding foreign keys to a table no longer uses PRAGMA writable_schema = 1 to directly manipulate the sqlite_master table. This was resulting in errors in some Python installations where the SQLite library was compiled in a way that prevented this from working, in particular on macOS. Foreign keys are now added using the table transformation mechanism instead. (#577)

This new mechanism creates a full copy of the table, so it is likely to be significantly slower for large tables, but will no longer trigger table sqlite_master may not be modified errors on platforms that do not support PRAGMA writable_schema = 1.

A new plugin, sqlite-utils-fast-fks, is now available for developers who still want to use that faster but riskier implementation.

其他更改

  • The table.transform() method has two new parameters: foreign_keys= allows you to replace the foreign key constraints defined on a table, and add_foreign_keys= lets you specify new foreign keys to add. These complement the existing drop_foreign_keys= parameter. (#577)

  • The sqlite-utils transform command has a new --add-foreign-key option which can be called multiple times to add foreign keys to a table that is being transformed. (#585)

  • sqlite-utils convert now has a --pdb option for opening a debugger on the first encountered error in your conversion script. (#581)

  • Fixed a bug where sqlite-utils install -e '.[test]' option did not work correctly.

3.34 (2023-07-22)

此版本引入了一个新的插件系统。在此处阅读更多信息:sqlite-utils 现在支持插件。(#567)

  • 文档描述了如何构建插件

  • 插件钩子:register_commands(cli),用于插件向 sqlite-utils 添加额外命令。(#569)

  • 插件钩子:prepare_connection(conn)。插件可以使用此钩子帮助准备 SQLite 连接,例如注册自定义 SQL 函数。感谢 Alex Garcia。(#574)

  • sqlite_utils.Database(..., execute_plugins=False) 选项用于禁用插件执行。(#575)

  • sqlite-utils install -e path-to-directory 选项用于安装可编辑的代码。此选项在插件开发期间很有用。(#570)

  • table.create(...) 方法现在接受 replace=True 参数以删除并替换同名现有表,或接受 ignore=True 参数以在同名表已存在时静默地不执行任何操作。(#568)

  • sqlite-utils insert ... --stop-after 10 选项用于在指定数量的记录后停止插入。此选项对 upsert 命令也有效。(#561)

  • insert 命令的 --csv--tsv 模式现在接受一个 --empty-null 选项,这将使 CSV 文件中的空字符串在数据库中存储为 null。(#563)

  • 用于重命名表的新方法:db.rename_table(table_name, new_name)。(#565)

  • 用于重命名表的命令:sqlite-utils rename-table my.db table_name new_name。(#565)

  • table.transform(...) 方法现在接受一个可选的 keep_table=new_table_name 参数,这将导致原始表在转换结束时被重命名为 new_table_name,而不是被丢弃。(#571)

  • 文档现在指出,不带任何参数调用 table.transform() 将重新格式化 SQLite 存储的 SQL 模式,使其更美观。(#564)

3.33 (2023-06-25)

  • 如果 sqlean.py 安装在与 sqlite-utils 相同的虚拟环境中,sqlite-utils 现在将使用 sqlean.py 代替 sqlite3。这对于 SQLite 版本过旧或对 SQLite 有限制(例如禁用扩展加载或导致 sqlite3.OperationalError: table sqlite_master may not be modified 错误)的 Python 环境很有用。(#559)

  • 新的 with db.ensure_autocommit_off() 上下文管理器,确保数据库在代码块执行期间处于 autocommit 模式。它被 db.enable_wal()db.disable_wal() 使用,以确保它们与 pysqlite3sqlean.py 正确工作。

  • 新的 db.iterdump() 方法,提供一个数据库转储的 SQL 字符串迭代器。如果 sqlite-dump 可用,则使用它,否则回退到 sqlite3conn.iterdump() 方法。由于 pysqlite3sqlean.py 都省略了对 iterdump() 的支持,此方法有助于弥补这一差异。

3.32.1 (2023-05-21)

3.32 (2023-05-21)

  • 新的实验性 sqlite-utils tui 接口,由 Trogon 提供支持,用于交互式构建命令行调用。这需要一个可选依赖项,使用 sqlite-utils install trogon 安装。文档中有一个截图。(#545)

  • sqlite-utils analyze-tables 命令(文档)现在有一个 --common-limit 20 选项,用于更改每列显示的最常见/最不常见值的数量。(#544)

  • sqlite-utils analyze-tables --no-most--no-least 选项用于禁用最常见和最不常见值的计算。

  • 如果一列只包含 null 值,analyze-tables 将不再尝试计算该列的最常见和最不常见值。(#547)

  • 在使用 -c/--column 选项指定不存在的列来调用 sqlite-utils analyze-tables 时,现在会显示错误消息。(#548)

  • table.analyze_column() 方法(此处有文档)现在接受 most_common=Falseleast_common=False 选项,用于禁用这些值的计算。

3.31 (2023-05-08)

  • 放弃了对 Python 3.6 的支持。测试现在确保与 Python 3.11 的兼容性。(#517)

  • 在 Apple Silicon 上自动定位 SpatiaLite 扩展。感谢 Chris Amico。(#536)

  • sqlite-utils querysqlite-utils memory 命令的新选项 --raw-lines,它只输出每行第一列的原始值。(#539)

  • 修复了如果传入 not_null= 选项时 table.upsert_all() 失败的错误。(#538)

  • 修复了使用 sqlite-utils insert 时出现的 ResourceWarning 警告。(#534)

  • 现在在使用无效 JSON 调用 sqlite-utils insert 时,会显示更详细的错误消息。(#532)

  • table.convert(..., skip_false=False)sqlite-utils convert --no-skip-false 选项,用于避免 convert() 机制跳过数据库中指定列值为 falsey 的行这一不当特性。默认修复此问题将是向后不兼容的更改,目前正在考虑在将来的 4.0 版本中进行。(#527)

  • 现在可以创建带有自引用外键的表。感谢 Scott Perry。(#537)

  • 如果表定义了列的默认值,sqlite-utils transform 不再中断。感谢 Kenny Song。(#509)

  • 修复了重复调用 table.transform() 无法正常工作的错误。感谢 Martin Carpenter。(#525)

  • 改进了如果向 rows_from_file() 传递非二进制模式文件对象时的错误消息。(#520)

3.30 (2022-10-25)

  • 现已针对 Python 3.11 进行测试。(#502)

  • 新的 table.search_sql(include_rank=True) 选项,将 rank 列添加到生成的 SQL 中。感谢 Jacob Chapman。(#480)

  • 现在使用 --nl 选项处理换行符分隔的 JSON 文件时会显示进度条。感谢 Mischa Untaga。(#485)

  • 新的 db.close() 方法。(#504)

  • 传递给 table.convert(…) 的转换函数现在可以返回列表或字典,这些将被作为 JSON 字符串插入到数据库中。(#495)

  • sqlite-utils installsqlite-utils uninstall 命令用于将软件包安装到与 sqlite-utils 相同的虚拟环境中,此处有描述。(#483)

  • 新的sqlite_utils.utils.flatten() 实用函数。(#500)

  • 关于使用Just 运行测试、linter 和构建文档的文档。

  • 文档现在涵盖了此包的发布过程

3.29 (2022-08-27)

  • sqlite-utils querymemorybulk 命令现在都接受新的 --functions 选项。此选项可以接受一段 Python 代码字符串,代码中定义的任何可调用对象都将作为自定义 SQL 函数供 SQL 查询使用。详细信息请参见定义自定义 SQL 函数。(#471)

  • db[table].create(...) 方法现在接受新的 transform=True 参数。如果表已存在,它将根据传递给函数的模式配置选项进行转换。这可能导致列被添加或删除、列类型被更改、列顺序更新或设置列的非空和默认值。(#467)

  • 与上述相关,sqlite-utils create-table 命令现在接受 --transform 选项。

  • 新的自省属性:table.default_values 返回一个字典,将每个带有默认值的列名映射到配置的默认值。(#475)

  • --load-extension 选项现在可以提供一个指向已编译 SQLite 扩展模块的路径,后跟入口点名称,两者用冒号分隔 - 例如 --load-extension ./lines0:sqlite3_lines0_noread_init。此功能基于 Alex Garcia 最初贡献给 Datasette 的代码。(#470)

  • 使用 db.register_function() 方法注册的函数现在可以使用新的 db.register_function(fn, name=...) 参数指定自定义名称。(#458)

  • sqlite-utils rows 有一个新的 --order 选项,用于指定返回行的排序顺序。(#469)

  • 所有接受 Python 代码块的 CLI 选项现在都可以用于定义函数,这些函数可以在同一代码块中访问导入的模块,而无需使用 global 关键字。(#472)

  • 修复了 table.extract() 对于包含 null 值的列无法正常工作的错误。感谢 Forest Gregg。(#423)

  • 新教程:使用 sqlite-utils 和 Datasette 清理数据 展示了如何使用 sqlite-utils 导入和清理示例 CSV 文件。

  • Datasette 和 sqlite-utils 现在有一个 Discord 社区。在此处加入 Discord

3.28 (2022-07-15)

  • 新的 table.duplicate(new_name) 方法,用于创建模式和行内容匹配的表副本。感谢 David。(#449)

  • 用于复制表的新 CLI 命令 sqlite-utils duplicate data.db table_name new_name。(#454)

  • sqlite_utils.utils.rows_from_file() 现在是一个有文档记载的 API。它可以用于从包含 CSV、TSV、JSON 或换行符分隔的 JSON 的文件对象中读取一系列字典。可以传入显式格式,也可以尝试自动检测格式。(#443)

  • sqlite_utils.utils.TypeTracker 现在是一个有文档记载的 API,用于检测一系列字符串行的可能列类型,请参见使用 TypeTracker 检测列类型。(#445)

  • sqlite_utils.utils.chunks() 现在是一个有文档记载的 API,用于将迭代器分割成块。(#451)

  • sqlite-utils enable-fts 现在有一个 --replace 选项,用于替换表的现有 FTS 配置。(#450)

  • create-indexadd-columnduplicate 命令现在都接受一个 --ignore 选项,用于在数据库状态不适合其操作时忽略错误。(#450)

3.27 (2022-06-14)

另请参阅此版本的带注解的发布说明

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

  • 文档中的代码示例现在带有“复制到剪贴板”按钮。(#436)

  • sqlite_utils.utils.utils.rows_from_file() 现在是一个有文档记载的 API,请参见从文件读取行。(#443)

  • rows_from_file() 新增了两个参数,用于处理 CSV 文件中行包含的值多于表头列出的值的情况:ignore_extras=Trueextras_key="name-of-key"。(#440)

  • sqlite_utils.utils.maximize_csv_field_size_limit() 辅助函数,用于将读取 CSV 文件时的字段大小限制增加到最大值,请参阅 设置最大 CSV 字段大小限制。(#442)

  • table.search(where=, where_args=) 参数用于向搜索查询添加额外的 WHERE 子句。where= 参数也可用于 table.search_sql(...)。请参阅 使用 table.search() 进行搜索。(#441)

  • 修复了 table.detect_fts() 和其他搜索相关函数可能失败的错误,当两个启用了 FTS 的表的名称互为前缀时。(#434)

3.26.1 (2022-05-02)

  • 现在依赖于 click-default-group-wheel,这是一个纯 Python wheel 包。这意味着您可以使用 Pyodide 安装和使用此包,它可以使用 WebAssembly 完全在浏览器中运行 Python。(#429)

    通过 Pyodide REPL 试试看

    >>> import micropip
    >>> await micropip.install("sqlite-utils")
    >>> import sqlite_utils
    >>> db = sqlite_utils.Database(memory=True)
    >>> list(db.query("select 3 * 5"))
    [{'3 * 5': 15}]
    

3.26 (2022-04-13)

  • r.parsedatetime()r.parsedate() 转换配方 新增 errors=r.IGNORE/r.SET_NULL 参数。(#416)

  • 修复了 convert 命令无法将 --multi--dry-run 结合使用的错误。(#415)

  • 新文档:定义 convert() 函数。(#420)

  • 更稳健地检测是否支持 deterministic=True。(#425)

3.25.1 (2022-03-11)

3.25 (2022-03-01)

3.24 (2022-02-15)

3.23 (2022-02-03)

此版本引入了四个用于处理 SpatiaLite 的新实用方法。感谢 Chris Amico。(#385)

3.22.1 (2022-01-25)

3.22 (2022-01-11)

  • 新增 CLI 参考 文档页面,列出了每个 CLI 命令的 --help 输出。(#383)

  • sqlite-utils rows 现在支持 --limit--offset 选项,用于分页浏览数据。(#381)

  • sqlite-utils rows 现在支持 --where-p 选项,用于使用 WHERE 查询过滤表,请参阅 返回表中的所有行。(#382)

3.21 (2022-01-10)

对 CLI 和 Python 库进行了改进,以帮助在创建索引或插入行后运行 ANALYZE,从而在 SQLite 查询规划器针对索引运行时获得更好的性能。

新增三个 CLI 命令:create-databaseanalyzebulk

更多详细信息和示例可在带注释的发布说明中找到。

  • 新增 sqlite-utils create-database 命令,用于创建新的空数据库文件。(#348)

  • 新增用于对数据库、表或索引运行 ANALYZE 的 Python 方法:db.analyze()table.analyze(),请参阅 使用 ANALYZE 优化索引使用。(#366)

  • 新增 sqlite-utils analyze 命令,用于使用 CLI 运行 ANALYZE。(#379)

  • create-indexinsertupsert 命令现在新增 --analyze 选项,用于在命令完成后运行 ANALYZE。(#379)

  • 新增 sqlite-utils bulk 命令,它可以像 sqlite-utils insert 一样(从 JSON、CSV 或 TSV)导入记录,并使用它们批量执行参数化 SQL 查询。(#375)

  • CLI 工具现在也可以使用 python -m sqlite_utils 运行。(#368)

  • 使用 --fmt 现在隐式包含 --table,因此您无需同时传递这两个选项。(#374)

  • 应用于行的 --convert 函数现在可以就地修改行。

  • The insert-files 命令 支持两个新列:stemsuffix。(#372)

  • --nl 导入选项现在忽略输入中的空行。(#376)

  • 修复了当使用 --batch-size 1insert 命令进行流式输入时,由于不必要的输入缓冲,看起来只有在摄入几行数据后才会提交的 bug。(#364)

3.20 (2022-01-05)

  • sqlite-utils insert ... --lines 将文件中的行插入到表中,该表有一个 line 列,请参阅 使用 --lines 和 --text 插入非结构化数据

  • sqlite-utils insert ... --text 将文件内容插入到表中,该表有一个 text 列和一行数据。

  • sqlite-utils insert ... --convert 允许提供一个 Python 函数,该函数将用于转换正在插入数据库的每一行。请参阅 插入数据时应用转换,其中包括与 --lines--text 结合使用时的特殊行为详情。(#356)

  • sqlite-utils convert 现在接受代码值为 -,用于从标准输入读取代码。(#353)

  • sqlite-utils convert 现在也接受定义名为 convert(value) 函数的代码,请参阅 转换列中的数据

  • db.supports_strict 属性,显示数据库连接是否支持 SQLite 严格表

  • table.strict 属性(请参阅 .strict),指示表是否使用严格模式。(#344)

  • 修复了 sqlite-utils upsert ... --detect-types 忽略 --detect-types 选项的 bug。(#362)

3.19 (2021-11-20)

  • table.lookup() 方法 现在接受与底层 table.insert() 方法匹配的关键字参数:foreign_keys=column_order=not_null=defaults=extracts=conversions=columns=。您现在还可以传递 pk= 来指定用作主键的不同列名。(#342)

3.18 (2021-11-14)

  • table.lookup() 方法现在有一个可选的第二个参数,可用于仅在首次创建记录时填充列,请参阅 使用查找表。(#339)

  • sqlite-utils memory 现在新增 --flatten 选项,用于将 嵌套的 JSON 对象展平 到单独的列中,这与 sqlite-utils insert 一致。(#332)

  • table.create_index(..., find_unique_name=True) 参数,即使默认名称已被占用,也会为创建的索引找到一个可用的名称。这意味着 index-foreign-keys 将能正常工作,即使它尝试创建的索引之一与现有索引名称冲突。(#335)

  • py.typed 添加到模块中,以便 mypy 现在应该能正确识别类型注解。感谢 Andreas Longo。(#331)

  • 现在依赖于 python-dateutil,而不是依赖于 dateutils。感谢 Denys Pavlov。(#324)

  • table.create()(请参阅 显式创建表)现在可以处理 dictlisttuple 类型,将它们映射到 SQLite 中的 TEXT 列,以便它们可以编码为 JSON 进行存储。(#338)

  • 列名中包含方括号(例如 CSV 文件中的 item[price])的插入数据现在会将方括号转换为下划线:item_price_。此前,此类列将被拒绝并报错。(#329)

  • 现在也针对 Python 3.10 进行了测试。(#330)

3.17.1 (2021-09-22)

3.17 (2021-08-24)

  • The sqlite-utils memory 命令新增 --analyze 选项,该选项直接对从输入的 CSV 或 JSON 数据创建的内存数据库运行相当于 analyze-tables 命令的操作。(#320)

  • sqlite-utils insert-files 现在除了默认的 BLOB 外,还能够将文件内容插入到 TEXT 列中。传递 --text 选项或使用 content_text 作为列规范。(#319)

3.16 (2021-08-18)

  • 为更多方法添加了类型签名,包括 table.resolve_foreign_keys()db.create_table_sql()db.create_table()table.create()。(#314)

  • 新增 db.quote_fts(value) 方法,请参阅 引用用于搜索的字符 - 感谢 Mark Neumann。(#246)

  • table.search() 现在接受可选的 quote=True 参数。(#296)

  • CLI 命令 sqlite-utils search 现在接受 --quote 选项。(#296)

  • 修复了 sqlite-utils insert--no-headers--tsv 选项不能一起使用的 bug。(#295)

  • API 参考 文档进行了各种小改进。

3.15.1 (2021-08-10)

  • Python 库现在几乎所有方法都包含类型注解,以及描述每个方法的详细 docstrings。(#311)

  • 新增由这些 docstrings 提供支持的 API 参考 文档页面。

  • 修复了当针对 View 调用时 .add_foreign_keys() 未引发错误的 bug。(#313)

  • 修复了当针对不存在的表调用时,.delete_where() 返回 [] 而不是返回 self 的 bug。(#315)

3.15 (2021-08-09)

  • sqlite-utils insert --flatten 选项,用于 展平嵌套的 JSON 对象,创建列名为 topkey_nestedkey 的表。(#310)

  • 修复了文档中的几个拼写错误,这些错误是 使用 codespell 发现的。

  • 使用 sqlite-utils CLI 工具时发生的错误现在会显示相关的 SQL 和查询参数(如果可能)。(#309)

3.14 (2021-08-02)

此版本引入了新的 sqlite-utils convert 命令 (#251) 和相应的 table.convert(…) Python 方法 (#302)。这些工具可用于将 Python 转换函数应用于表的一个或多个列,既可以就地更新列,也可以使用该列转换后的数据填充一个或多个其他列。

此命令行示例使用 Python 标准库 textwrap 模块articles 表中 content 列的内容包装为 100 个字符

$ sqlite-utils convert content.db articles content \
    '"\n".join(textwrap.wrap(value, 100))' \
    --import=textwrap

在 Python 代码中,同样的操作如下所示

import sqlite_utils, textwrap

db = sqlite_utils.Database("content.db")
db["articles"].convert("content", lambda v: "\n".join(textwrap.wrap(v, 100)))

有关更多详细信息,请参阅 sqlite-utils convert 命令table.convert(…) Python 方法的完整文档。

本次发布还包含

  • 新增 table.count_where(...) 方法,用于计算表中符合特定 SQL WHERE 子句的行数。(#305)

  • sqlite-utils insert-files 命令 新增 --silent 选项,用于隐藏终端进度条,这与 sqlite-utils convert--silent 选项一致。(#301)

3.13 (2021-07-24)

  • sqlite-utils schema my.db table1 table2 命令现在接受可选的表名。(#299)

  • sqlite-utils memory --help 现在描述了 --schema 选项。

3.12 (2021-06-25)

  • 新增 db.query(sql, params) 方法,用于执行 SQL 查询并以 Python 字典迭代器形式返回结果。(#290)

  • 本项目现在使用 flake8 并已开始使用 mypy。(#291)

  • 新增关于 贡献 本项目的文档。(#292)

3.11 (2021-06-20)

3.10 (2021-06-19)

此版本引入了 sqlite-utils memory 命令,该命令可用于将 CSV 或 JSON 数据加载到临时内存数据库中,并直接针对这些数据运行 SQL 查询(包括跨多个文件的连接)。

新功能还包括:sqlite-utils insert --detect-typessqlite-utils dumptable.use_rowid 以及一些小修复。

sqlite-utils memory

这个 sqlite-utils memory 的例子使用 这个 JSON API 检索 GitHub 上 Dogsheep 组织中所有仓库的信息,按星数排序并输出前五名的表格(使用 -t)。

$ curl -s 'https://api.github.com/users/dogsheep/repos' \
  | sqlite-utils memory - '
      select full_name, forks_count, stargazers_count
      from stdin order by stargazers_count desc limit 5
    ' -t
full_name                            forks_count    stargazers_count
---------------------------------  -------------  ------------------
dogsheep/twitter-to-sqlite                    12                 225
dogsheep/github-to-sqlite                     14                 139
dogsheep/dogsheep-photos                       5                 116
dogsheep/dogsheep.github.io                    7                  90
dogsheep/healthkit-to-sqlite                   4                  85

该工具也适用于磁盘上的文件。这个例子连接了两个 CSV 文件的数据

$ cat creatures.csv
species_id,name
1,Cleo
2,Bants
2,Dori
2,Azi
$ cat species.csv
id,species_name
1,Dog
2,Chicken
$ sqlite-utils memory species.csv creatures.csv '
  select * from creatures join species on creatures.species_id = species.id
'
[{"species_id": 1, "name": "Cleo", "id": 1, "species_name": "Dog"},
 {"species_id": 2, "name": "Bants", "id": 2, "species_name": "Chicken"},
 {"species_id": 2, "name": "Dori", "id": 2, "species_name": "Chicken"},
 {"species_id": 2, "name": "Azi", "id": 2, "species_name": "Chicken"}]

在这里,species.csv 文件变成了 species 表,creatures.csv 文件变成了 creatures 表,输出格式为默认的 JSON。

您还可以使用 --attach 选项将现有的 SQLite 数据库文件附加到内存数据库,以便直接将 CSV 或 JSON 中的数据与现有表连接起来。

这项新功能的完整文档请参见使用内存数据库直接查询数据。 (#272)

sqlite-utils insert --detect-types

sqlite-utils insert 命令可用于将 JSON、CSV 或 TSV 文件中的数据插入到 SQLite 数据库文件中。新的 --detect-types 选项(快捷方式 -d)与 CSV 或 TSV 导入结合使用时,将自动检测文件中的列是整数还是浮点数,而不是将所有内容都视为文本列,并使用相应的模式创建新表。详情请参阅插入 CSV 或 TSV 数据。 (#282)

其他变更

  • 错误修复table.transform() 在对没有显式主键的表运行时,会错误地创建一个新版本的表,其中包含一个名为 rowid 的显式主键列。 (#284)

  • 新的 table.use_rowid 内省属性,请参阅.use_rowid。 (#285)

  • 新的 sqlite-utils dump file.db 命令输出一个 SQL 转储文件,可用于重新创建数据库。 (#274)

  • -h 现在可用作 --help 的快捷方式,感谢 Loren McIntyre。 (#276)

  • 现在使用 pytest-covCodecov 来跟踪测试覆盖率 - 目前为 96%。 (#275)

  • 使用 sqlite-utils query 时发生的 SQL 错误现在显示为 CLI 错误。

3.9.1 (2021-06-12)

  • 修复了使用 table.upsert_all() 创建一个只有一列并将其视为主键的表时出现的错误。 (#271)

3.9 (2021-06-11)

3.8 (2021-06-02)

  • 新的 sqlite-utils indexes 命令,用于列出数据库中的索引,请参阅列出索引。 (#263)

  • table.xindexes 内省属性,返回有关该表索引的更多详细信息,请参阅.xindexes。 (#261)

3.7 (2021-05-28)

  • 新的 table.pks_and_rows_where() 方法,返回 (primary_key, row_dictionary) 元组 - 请参阅列出带有主键的行。 (#240)

  • 修复了 table.add_foreign_key() 对包含空格的列操作时出现的错误。 (#238)

  • table_or_view.drop(ignore=True) 选项,用于在表或视图不存在时避免错误。 (#237)

  • sqlite-utils drop-view --ignoresqlite-utils drop-table --ignore 选项。 (#237)

  • 修复了插入包含非 ASCII 字符串的嵌套 JSON 时出现的错误 - 感谢 Dylan Wu。 (#257)

  • 如果发生因缺少列导致的错误,建议使用 --alter。 (#259)

  • 支持创建按降序排列列的索引,请参阅API 文档CLI 文档。 (#260)

  • 正确处理以 UTF-8 BOM 开头的 CSV 文件。 (#250)

3.6 (2021-02-18)

此版本增加了执行查询连接多个数据库文件数据的能力 - 类似于 Datasette 0.55 中引入的跨数据库查询功能。

3.5 (2021-02-14)

  • sqlite-utils insert --sniff 选项,用于检测 CSV 文件使用的分隔符和引用字符,请参阅备用分隔符和引用字符。 (#230)

  • table.rows_where()table.search()table.search_sql() 方法现在都接受可选的 offset=limit= 参数。 (#231)

  • 新的 --no-headers 选项用于 sqlite-utils insert --csv,以处理缺少标题行的 CSV 文件,请参阅没有标题行的 CSV 文件。 (#228)

  • 修复了在后续数据块中插入带有额外列的数据时会抛出错误的错误。感谢 @nieuwenhoven 的修复。 (#234)

  • 修复了导入包含超过 128KB 数据列的 CSV 文件时出现的错误。 (#229)

  • 测试套件现在在 CI 中针对 Ubuntu、macOS 和 Windows 运行。感谢 @nieuwenhoven 对 Windows 测试的修复。 (#232)

3.4.1 (2021-02-05)

  • 修复了在 3.4 中出现的代码导入错误。 (#226)

3.4 (2021-02-05)

3.3 (2021-01-17)

  • table.m2m() 方法现在接受可选的 alter=True 参数,用于指定是否应将任何缺失的列添加到引用表中。请参阅使用多对多关系。 (#222)

3.2.1 (2021-01-12)

  • 修复了 .add_missing_columns() 未考虑列名不区分大小写的问题。 (#221)

3.2 (2021-01-03)

此版本引入了一种新机制,通过使用缓存的表计数(存储在 _counts 表中并由触发器更新)来加快 count(*) 查询。该机制在使用触发器缓存表计数中进行了描述,并且可以使用 Python API 方法或新的 enable-counts CLI 命令启用。 (#212)

  • table.enable_counts() 方法,用于在特定表上启用这些触发器。

  • db.enable_counts() 方法,用于在数据库中的每个表上启用触发器。 (#213)

  • 新的 sqlite-utils enable-counts my.db 命令,用于在所有或特定表上启用计数,请参阅启用缓存计数。 (#214)

  • 新的 sqlite-utils triggers 命令,用于列出为数据库或特定表定义的触发器,请参阅列出触发器。 (#218)

  • 新的 db.use_counts_table 属性,如果为 True,则导致 table.count_counts 表读取。 (#215)

  • table.has_counts_triggers 属性,显示表是否已配置新的 _counts 数据库触发器。

  • db.reset_counts() 方法和 sqlite-utils reset-counts 命令,用于重置 _counts 表中的值。 (#219)

  • 之前未记录的 db.escape() 方法已重命名为 db.quote(),并且现在包含在文档中:引用字符串用于 SQL。 (#217)

  • 新的 table.triggers_dictdb.triggers_dict 内省属性。 (#211, #216)

  • sqlite-utils insert 现在针对无效的 JSON 显示更有用的错误消息。 (#206)

3.1.1 (2021-01-01)

  • 修复了由于 optimize 有时会创建更大的数据库文件而导致的测试失败。 (#209)

  • 文档现位于 https://sqlite-utils.datasette.com.cn/

  • README 现在包含 brew install sqlite-utils 安装方法。

3.1 (2020-12-12)

  • 新命令:sqlite-utils analyze-tables my.db 输出有关数据库表中列的有用信息,例如不同值的数量和空行的数量。文档请参阅分析表。 (#207)

  • 新的 table.analyze_column(column) Python 方法,由 analyze-tables 命令使用 - 请参阅分析列

  • table.update() 方法现在可以正确处理应存储为 JSON 的值。感谢 Andreas Madsack。 (#204)

3.0 (2020-11-08)

此版本引入了新的 sqlite-utils search 命令,用于搜索表,请参阅执行搜索。 (#192)

table.search() 方法已重新设计,请参阅使用 table.search() 进行搜索。 (#197)

此版本包含一些次要的向后不兼容的更改,因此版本号升级到 3.0。这些更改(不应影响大多数用户)如下:

  • 用于输出 CSV 的 -c 快捷选项不再可用。现在需要使用完整的 --csv 选项。

  • 用于 --fmt-f 快捷方式也已移除 - 请使用 --fmt

  • table.search() 方法现在默认为按相关性排序,而不是按 rowid 排序。 (#198)

  • table.search() 方法现在返回一个生成器,用于处理 Python 字典列表。它以前返回的是元组列表。

本次发布还包含

  • querytablesrowssearch CLI 命令现在接受新的 --tsv 选项,该选项以 TSV 格式输出结果。 (#193)

  • 新的 table.virtual_table_using 属性,用于判断表是否为虚拟表,如果是,则返回虚拟表的大写类型(例如 FTS4FTS5)。如果表不是虚拟表,则返回 None。 (#196)

  • 新的 table.search_sql() 方法返回用于搜索表的 SQL,请参阅使用 table.search_sql() 构建 SQL 查询

  • sqlite-utils rows 现在接受多个可选的 -c 参数,用于指定要返回的列。 (#200)

自 3.0a0 alpha 版本以来的变更

  • sqlite-utils search 命令现在默认返回所有结果,除非您添加 --limit 20 选项。

  • sqlite-utils search -ctable.search(columns=[]) 选项现在得到充分遵守。 (#201)

2.23 (2020-10-28)

  • table.m2m(other_table, records) 方法现在接受任何可迭代对象,而不仅仅是列表或元组。感谢 Adam Wolf。 (#189)

  • sqlite-utils insert 现在在导入 CSV 或 TSV 时显示进度条。 (#173)

  • 新的 @db.register_function(deterministic=True) 选项,用于在 Python 3.8 或更高版本中注册确定性 SQLite 函数。 (#191)

2.22 (2020-10-16)

  • 为处理非 utf-8 编码的 CSV 和 TSV 文件,在 insertupdate 命令中新增了 --encoding 选项。 (#182)

  • --load-extension 选项现在可用于更多命令。 (#137)

  • 如果可用,可以使用 --load-extension=spatialite 从常见安装位置加载 SpatiaLite。 (#136)

  • 测试现在也针对 Python 3.9 运行。 (#184)

  • 传递 pk=["id"] 现在与传递 pk="id" 具有相同的效果。 (#181)

2.21 (2020-09-24)

  • table.extract()sqlite-utils extract 现在运行速度快得多 - 一个示例操作从十二分钟减少到仅需四秒! (#172)

  • sqlite-utils extract 不再显示进度条,因为它速度已足够快,无需进度条。

  • table.transform() 新增 column_order= 选项,可用于更改表中的列顺序。 (#175)

  • 新增 sqlite-utils transform --column-order= 选项(带 -o 快捷方式)用于更改列顺序。 (#176)

  • 参数 table.transform(drop_foreign_keys=) 和选项 sqlite-utils transform --drop-foreign-key 已更改。它们现在只接受列名,而不再需要同时指定列、其他表和另一列这三个参数。从技术上讲,这是一个向后不兼容的更改,但我选择不提升主版本号,因为 transform 功能非常新。 (#177)

  • 表格的 .disable_fts().rebuild_fts().delete().delete_where().add_missing_columns() 方法现在都 return self,这意味着它们可以与其他表格操作链式调用。

2.20 (2020-09-22)

此版本引入了两个关键新功能:transform (#114) 和 extract (#42)。

Transform

SQLite 的 ALTER TABLE 存在一些已知的限制table.transform() Python 方法和 sqlite-utils transform CLI 命令通过创建一个具有所需结构的新表、将数据复制过去,然后删除旧表并替换为新表的模式来规避这些限制。

您可以使用这些工具更改列类型、重命名列、删除列、添加和删除 NOT NULL 和默认值、删除外键约束等。有关如何使用它们的完整详细信息,请参阅转换表(CLI)转换表(Python 库)文档。

Extract

有时数据库表——特别是从 CSV 文件导入的表——会包含重复数据。一个 Trees 表可能包含一个 Species 列,其中只有几十个唯一值,而表本身包含数千行。

table.extract() 方法和 sqlite-utils extract 命令可以将一列或多列提取到单独的查找表中,并从原始表建立外键关系。

Python 库的extract() 文档详细描述了提取的工作原理,CLI 文档中的将列提取到单独的表中包含详细示例。

其他更改

  • @db.register_function 装饰器可用于快速将 Python 函数注册为自定义 SQL 函数,请参阅注册自定义 SQL 函数。 (#162)

  • table.rows_where() 方法现在接受一个可选的 select= 参数,用于指定应选择哪些列,请参阅列出行

2.19 (2020-09-20)

  • 新增 sqlite-utils add-foreign-keys 命令,用于一次添加多个外键。 (#157)

  • 新增 table.enable_fts(..., replace=True) 参数,用于用新的配置替换现有的 FTS 表。 (#160)

  • 新增 table.add_foreign_key(..., ignore=True) 参数,用于忽略已存在的外键。 (#112)

2.18 (2020-09-08)

  • table.rebuild_fts() 方法用于重建 FTS 索引,请参阅重建全文搜索表。 (#155)

  • sqlite-utils rebuild-fts data.db 命令用于重建所有表或指定表的 FTS 索引。 (#155)

  • table.optimize() 方法不再删除 *_fts_docsize 表中的垃圾行。此功能在 2.17 版本中添加,但事实证明运行 table.rebuild_fts() 是解决此问题的更好方法。

  • 修复了插入第一批记录后插入具有附加列的行时可能导致错误(由于超出 SQLite 的最大参数数量)的错误。感谢 Simon Wiles。 (#145)

2.17 (2020-09-07)

此版本解决了替换 FTS 表中的行可能导致相关 *_fts_docsize 表中不必要行数量不断增加的错误。 (#149)

  • 所有连接默认启用 PRAGMA recursive_triggers=on。您可以通过 Database(recursive_triggers=False) 关闭它。 (#152)

  • table.optimize() 方法现在删除 *_fts_docsize 表中不必要的行。 (#153)

  • 新增用于跟踪底层 SQL 查询的 tracer 方法,请参阅跟踪查询。 (#150)

  • schema SQL 缩进更整洁。 (#148)

  • 新增对 add_foreign_keys() 抛出的 sqlite_utils.AlterError 异常的文档。

2.16.1 (2020-08-28)

  • insert_all(..., alter=True) 现在对前 100 条记录后引入的列也有效。感谢 Simon Wiles! (#139)

  • 持续集成现在由 GitHub Actions 提供支持。 (#143)

2.16 (2020-08-21)

  • sqlite-utils query 新增 --load-extension 选项,用于加载 SQLite 扩展。 (#134)

  • 新增 sqlite_utils.utils.find_spatialite() 函数,用于在常见位置查找 SpatiaLite。 (#135)

2.15.1 (2020-08-12)

  • 除了 wheel 包外,现在还可以在 PyPI 上获取 sdist 包。 (#133)

2.15 (2020-08-10)

2.14.1 (2020-08-05)

  • 文档改进。

2.14 (2020-08-01)

  • insert-files 命令现在可以从标准输入读取:cat dog.jpg | sqlite-utils insert-files dogs.db pics - --name=dog.jpg。 (#127)

  • 现在可以使用 enable_fts() 的新参数 tokenize= 来指定全文搜索分词器。这意味着您可以通过运行 db["articles"].enable_fts(["headline", "body"], tokenize="porter") 对表启用 Porter 词干分析。 (#130)

  • 您还可以使用 sqlite-utils enable-fts CLI 命令,通过新的 --tokenize 选项设置自定义分词器。

2.13 (2020-07-29)

  • 现在支持 memoryviewuuid.UUID 对象。memoryview 对象将使用 BLOB 存储,uuid.UUID 对象将使用 TEXT 存储。 (#128)

2.12 (2020-07-27)

此版本的主题是改进处理二进制数据的工具。新的 insert-files 命令可用于将二进制文件直接插入到数据库表中,并且其他命令也通过改进对 BLOB 列的支持得到增强。

  • sqlite-utils insert-files my.db gifs *.gif 现在可以将文件内容插入到指定的表中。可以自定义表中的列以包含从文件派生的不同元数据。请参阅从文件插入数据。 (#122)

  • sqlite-utils query 新增 --raw 选项 - 用于仅输出单个原始列值 - 请参阅返回原始数据,例如二进制内容。 (#123)

  • JSON 输出现在将 BLOB 值编码为特殊的 base64 对象 - 请参阅返回 JSON。 (#125)

  • 现在可以使用相同格式的 JSON base64 对象来插入二进制数据 - 请参阅插入 JSON 数据。 (#126)

  • sqlite-utils query 命令现在接受命名参数,例如 sqlite-utils :memory: "select :num * :num2" -p num 5 -p num2 6 - 请参阅返回 JSON。 (#124)

2.11 (2020-07-08)

  • sqlite-utils insert 新增 --truncate 选项,以及 .insert_all() 新增 truncate=True 参数。感谢 Thomas Sibley。 (#118)

  • sqlite-utils query 命令现在在事务中运行更新。感谢 Thomas Sibley。 (#120)

2.10.1 (2020-06-23)

  • 添加了 table.pks 内省属性的文档。 (#116)

2.10 (2020-06-12)

  • sqlite-utils query 命令现在支持 UPDATE/INSERT/DELETE 以及 SELECT。 (#115)

2.9.1 (2020-05-11)

2.9 (2020-05-10)

  • 新增 sqlite-utils drop-table 命令,请参阅删除表。 (#111)

  • 新增 sqlite-utils drop-view 命令,请参阅删除视图

  • Python decimal.Decimal 对象现在存储为 FLOAT。 (#110)

2.8 (2020-05-03)

  • 新增 sqlite-utils create-table 命令,请参阅创建表。 (#27)

  • 新增 sqlite-utils create-view 命令,请参阅创建视图。 (#107)

2.7.2 (2020-05-02)

  • db.create_view(...) 现在具有附加参数 ignore=Truereplace=True,请参阅创建视图。 (#106)

2.7.1 (2020-05-01)

  • 新增 sqlite-utils views my.db 命令,用于列出数据库中的视图,请参阅列出视图。 (#105)

  • sqlite-utils tables(和 views)新增 --schema 选项,用于输出表/视图 schema,请参阅列出表。 (#104)

  • 包含无效 JSON 值(例如 Python bytestrings)的嵌套结构现在使用 repr() 序列化,而不是抛出错误。 (#102)

2.7 (2020-04-17)

  • .insert().insert_all().upsert().upsert_all() 方法新增 columns= 参数,用于覆盖列的自动检测类型,并指定创建表时应添加的附加列。请参阅自定义列顺序和列类型。 (#100)

2.6 (2020-04-15)

  • table.rows_where(..., order_by="age desc") 新增参数,请参阅列出行。 (#76)

2.5 (2020-04-12)

  • Panda 的 Timestamp 现在存储为 SQLite TEXT 列。感谢 b0b5h4rp13! (#96)

  • table.last_pk 现在仅适用于插入或更新单个记录。 (#98)

  • 新增 Database(filepath, recreate=True) 参数,用于删除和重新创建数据库。 (#97)

2.4.4 (2020-03-23)

  • 修复了仅包含 null 值的列未能正确创建的错误。 (#95)

2.4.3 (2020-03-23)

  • 列类型建议代码不再受 null 值干扰。 (#94)

2.4.2 (2020-03-14)

  • table.column_dicts 现在适用于所有列类型 - 之前它会在 TEXTBLOBINTEGERFLOAT 之外的类型上抛出错误。 (#92)

  • 新增对 table.get(pk) 抛出的 NotFoundError 异常的文档 - 请参阅检索特定记录

2.4.1 (2020-03-01)

  • table.enable_fts() 现在适用于包含空格的列。 (#90)

2.4 (2020-02-26)

  • table.disable_fts() 现在可用于移除使用 table.enable_fts(...) 创建的 FTS 表和触发器。 (#88)

  • sqlite-utils disable-fts 命令可用于从命令行移除 FTS 表和触发器。 (#88)

  • 尝试创建列名包含方括号([ 或 ])的表列现在会抛出错误。 (#86)

  • dictlisttuple 的子类现在被检测为需要 JSON 列。 (#87)

2.3.1 (2020-02-10)

table.create_index() 现在适用于包含空格的列。 (#85)

2.3 (2020-02-08)

table.exists() 现在是一个方法,而不是属性。这在之前并非文档化 API 的一部分,因此我认为这是一个非破坏性更改。 (#83)

2.2.1 (2020-02-06)

修复了 .upsert(..., hash_id="pk") 抛出错误的错误 (#84)。

2.2 (2020-02-01)

新增功能:sqlite_utils.suggest_column_types([records]) 返回记录列表的建议列类型。请参阅建议列类型。 (#81)。

这取代了未文档化的 table.detect_column_types() 方法。

2.1 (2020-01-30)

新增功能:可以将 conversions={...} 传递给 .insert() 系列函数,以指定应应用于插入或更新值的 SQL 转换。请参阅使用 SQL 函数转换列值。 (#77)。

2.0.1 (2020-01-05)

.upsert().upsert_all() 方法现在在未通过 pk= 指定主键列的情况下调用时,会抛出 sqlite_utils.db.PrimaryKeyRequired 异常 (#73)。

2.0 (2019-12-29)

此版本更改了 upsert 的行为。这是一个破坏性更改,因此版本号为 2.0

upsert 命令行工具以及 .upsert().upsert_all() Python API 方法的行为已更改。它们以前会完全替换受影响的记录:现在,它们会更新现有记录上指定的值,但其他列不受影响。

有关完整详细信息,请参阅使用 Python API 更新插入数据 (Upsert)使用 CLI 更新插入数据 (Upsert)

如果您想要旧的行为——即记录被完全替换——您可以在命令行上使用 $ sqlite-utils insert ... --replace,并在 Python API 中使用 .insert(..., replace=True).insert_all(..., replace=True)。更多信息请参阅使用 Python API 插入并替换数据使用 CLI 插入并替换数据

有关此更改的完整背景信息,请参阅issue #66

1.12.1 (2019-11-06)

  • 修复了调用 .insert_all().upsert_all() 时传入空列表会抛出错误的错误 (#52)

1.12 (2019-11-04)

用于删除记录的 Python 库实用工具 (#62)

1.11 (2019-09-02)

创建触发器以自动使 FTS 表与新插入、更新和删除的记录保持同步的选项。感谢 Amjith Ramanujam! (#57)

1.10 (2019-08-23)

内省和查询视图的能力 (#54)

  • db.view_names() 方法和 db.views 属性

  • 单独的 ViewTable 类,都继承自新的 Queryable

  • view.drop() 方法

请参阅列出视图

1.9 (2019-08-04)

1.8 (2019-07-28)

1.7.1 (2019-07-28)

  • 修复了在批量插入 100 条记录时插入 11 列的记录会触发“SQL 变量过多”错误的错误 (#50)

  • 新增对 table.drop() 方法的文档和测试:删除表或视图

1.7 (2019-07-24)

支持查找表。

  • 新增 table.lookup({...}) 实用方法,用于构建和查询查找表 - 请参阅处理查找表 (#44)

  • 新增 extracts= 表配置选项,请参阅在插入/更新时自动填充查找表 (#46)

  • 优先使用 pysqlite3(如果可用),否则使用标准库中的 sqlite3

  • 表选项现在可以通过新的 db.table(name, **options) 工厂函数传递,也可以传递给 insert_all(records, **options) 等方法 - 请参阅表配置选项

  • 现在可以使用 db = Database(memory=True) 创建内存数据库

1.6 (2019-07-18)

  • sqlite-utils insert 现在可以通过新的 --tsv 选项接受 TSV 数据 (#41)

1.5 (2019-07-14)

  • 支持复合主键 (#36)

    • 通过 CLI 工具多次传递 --pk 进行配置

    • 在 Python 中,将列的元组传递给 pk=(..., ...) 参数:复合主键

  • 新增 table.get() 方法,用于按主键检索记录:检索特定记录 (#39)

1.4.1 (2019-07-14)

1.4 (2019-06-30)

  • 添加了 sqlite-utils index-foreign-keys 命令(文档)和 db.index_foreign_keys() 方法(文档) (#33)

1.3 (2019-06-28)

1.2.2 (2019-06-25)

  • 修复了 datetime.time 未正确处理的错误

1.2.1 (2019-06-20)

  • 在尝试添加外键之前检查列是否存在 (#29)

1.2 (2019-06-12)

1.1 (2019-05-28)

1.0.1 (2019-05-27)

  • sqlite-utils rows data.db table --json-cols - 修复了未遵循 --json-cols 的错误

1.0 (2019-05-24)

0.14 (2019-02-24)

  • 创建唯一索引的能力:db["mytable"].create_index(["name"], unique=True)

  • db["mytable"].create_index(["name"], if_not_exists=True)

  • $ sqlite-utils create-index mydb.db mytable col1 [col2...],请参阅创建索引

  • table.add_column(name, type) 方法,请参阅添加列

  • $ sqlite-utils add-column mydb.db mytable nameofcolumn,请参阅添加列(CLI)

  • db["books"].add_foreign_key("author_id", "authors", "id"),请参阅添加外键约束

  • $ sqlite-utils add-foreign-key books.db books author_id authors id,请参阅添加外键约束(CLI)

  • 改进的(但向后不兼容)foreign_keys= 参数用于各种方法,请参阅指定外键

0.13 (2019-02-23)

  • 新的 --table--fmt 选项可用于以各种可视化表格格式输出查询结果,请参阅表格格式输出

  • 新的 hash_id= 参数现在可用于根据行内容的哈希值设置 ID

  • 现在可以推断 numpy int、uint 和 float 值的正确列类型

  • table.last_id 已重命名为 table.last_rowid

  • 如果指定了 pk=table.last_pk 现在包含最后插入的主键

  • CREATE TABLE 生成的 schema 缩进更美观

0.12 (2019-02-22)

  • 添加了 db[table].rows 迭代器 - 请参阅列出行

  • sqlite-utils jsonsqlite-utils csv 替换为新的默认子命令 sqlite-utils query,该命令默认输出 JSON,并带有格式选项 --nl--csv--no-headers - 请参阅返回 JSON返回 CSV 或 TSV

  • 新的 sqlite-utils rows data.db name-of-table 命令,请参阅返回表中的所有行

  • sqlite-utils table 命令现在接受 --counts--columns 选项,以及标准的输出格式选项,请参阅列出表

0.11 (2019-02-07)

新增启用表和列 FTS 的命令

sqlite-utils enable-fts db.db mytable col1 col2

请参阅配置全文搜索

0.10 (2019-02-06)

处理 datetime.datedatetime.time 值。

高效插入 CSV 行的新选项

sqlite-utils insert db.db foo - --csv

0.9 (2019-01-27)

改进了对换行符分隔 JSON 的支持。

sqlite-utils insert 有两个新的命令行选项

  • --nl 表示“期望换行符分隔的 JSON”。这是一种加载大量数据的极其高效的方法,特别是当您将其管道到标准输入时。

  • --batch-size=1000 允许您增加批量大小(默认为 100)。每插入 X 条记录将提交一次。这也控制了在检测数据所需的 SQL 表 schema 时考虑的初始记录数量。

在 Python API 中,table.insert_all(...) 方法现在可以接受生成器以及对象列表。无论生成器产生多少记录,这将高效地填充表。

Database() 构造函数现在除了接受字符串或现有 SQLite 连接对象外,还可以接受 pathlib.Path 对象。

0.8 (2019-01-25)

两个新命令:sqlite-utils csvsqlite-utils json

这些命令执行 SQL 查询并以 CSV 或 JSON 格式返回结果。详细信息请参阅返回 CSV 或 TSV返回 JSON

$ sqlite-utils json --help
Usage: sqlite-utils json [OPTIONS] PATH SQL

  Execute SQL query and return the results as JSON

Options:
  --nl      Output newline-delimited JSON
  --arrays  Output rows as arrays instead of objects
  --help    Show this message and exit.

$ sqlite-utils csv --help
Usage: sqlite-utils csv [OPTIONS] PATH SQL

  Execute SQL query and return the results as CSV

Options:
  --no-headers  Exclude headers from CSV output
  --help        Show this message and exit.

0.7 (2019-01-24)

此版本实现了带有多个有用子命令的 sqlite-utils 命令行工具。

  • sqlite-utils tables demo.db 列出数据库中的表

  • sqlite-utils tables demo.db --fts4 仅显示 FTS4 表

  • sqlite-utils tables demo.db --fts5 仅显示 FTS5 表

  • sqlite-utils vacuum demo.db 对数据库运行 VACUUM

  • sqlite-utils optimize demo.db 对所有 FTS 表运行 OPTIMIZE,然后运行 VACUUM

  • sqlite-utils optimize demo.db --no-vacuum 运行 OPTIMIZE 但跳过 VACUUM

两个最有用的子命令是 upsertinsert,它们允许您摄取包含一条或多条记录的 JSON 文件,如果相应的表尚不存在,则创建具有正确列的表。详细信息请参阅插入 JSON 数据

  • sqlite-utils insert demo.db dogs dogs.json --pk=iddogs.json 中的新记录插入到 dogs 表中

  • sqlite-utils upsert demo.db dogs dogs.json --pk=id 更新插入记录,替换具有重复主键的任何记录

一个向后不兼容的更改:db["table"].table_names 属性现在是一个方法

  • db["table"].table_names() 返回表名列表

  • db["table"].table_names(fts4=True) 仅返回 FTS4 表列表

  • db["table"].table_names(fts5=True) 仅返回 FTS5 表列表

其他一些更改

  • 大量更新的文档,包括对新命令行工具的全面覆盖

  • 允许列名使用保留字(使用正确的 SQL 转义)

  • 添加了对 bytes 和 datetime.datetime 的自动列支持

0.6 (2018-08-12)

  • .enable_fts() 现在接受可选参数 fts_version,默认为 FTS5。如果您的 Python 版本捆绑的 SQLite 不支持 FTS5,请使用 FTS4

  • 新的可选 column_order= 参数用于 .insert() 和相关方法,用于在创建数据库表时提供列的部分或完整的期望顺序

  • 新增文档用于 .insert_all().upsert() 以及 .upsert_all()

0.5 (2018-08-05)

  • db.tablesdb.table_names 内省属性

  • db.indexes 属性用于内省索引

  • table.create_index(columns, index_name) 方法

  • db.create_view(name, sql) 方法

  • 表方法现在可以链式调用,并添加了 table.last_id 用于访问最后插入的 row ID

0.4 (2018-07-31)

  • enable_fts()populate_fts()search() 表方法

0.3.1 (2018-07-31)

  • 文档化相关项目

  • 为文档添加徽章

0.3 (2018-07-31)

  • 表示 SQLite 数据库中表的新 Table

0.2 (2018-07-28)

  • 首次发布到 PyPI