升级 Wagtail 后如何解决 fts5 错误

Posted

技术标签:

【中文标题】升级 Wagtail 后如何解决 fts5 错误【英文标题】:How can I resolve fts5 error after I upgraded Wagtail 【发布时间】:2021-11-21 11:06:24 【问题描述】:

我已使用 Django 3.1.13 将 Wagtail 安装升级到 2.15.1

当我运行 manage.py migrate 时出现错误

django.db.utils.OperationalError:没有这样的模块:fts5

我已经搜索过,但找不到任何解决此问题的方法

有人可以帮忙吗?

这是发生错误时在django/db/backends/sqlite3/base.py中运行的代码

class SQLiteCursorWrapper(Database.Cursor):
    def execute(self, query, params=None):
        if params is None:
            return Database.Cursor.execute(self, query)

上线失败

            return Database.Cursor.execute(self, query)

query 的最后 3 个值是

 CREATE VIRTUAL TABLE wagtailsearch_indexentry_fts USING fts5(autocomplete, body, title)
 PRAGMA foreign_key_check
 PRAGMA foreign_keys = ON

失败发生在最后一个

【问题讨论】:

【参考方案1】:

问题出在鹡鸰

我从站点 wagtail 包中删除了 migrations 文件夹并运行了 makemigrationsmigrate。现在可以使用了

【讨论】:

这绝对不推荐。这将使升级到未来的 Wagtail 版本变得异常困难,因为您生成和应用的迁移与 Wagtail 的下一个版本附带的迁移不匹配。【参考方案2】:

这是与不提供 fts5 扩展名的 sqlite 版本的兼容性问题,现已在 Wagtail 2.15.2 中修复。

(旧资料,留作参考:)

这是一个开放的 Wagtail 问题,目前正在 https://github.com/wagtail/wagtail/issues/7798 处理。

现在,您需要确保系统上安装的 sqlite 版本带有 fts5 扩展名。对于 Mac 和 Windows,这很可能与 Python 安装程序捆绑在一起,所以这不是问题。对于 Linux,这取决于发行版 - Ubuntu 18.04 有,16.04 没有。有关如何升级的详细信息,请参阅How can I use the FTS5 extension with the sqlite3 python module with Python 3.7 on Ubuntu 16.04?。

【讨论】:

以上是关于升级 Wagtail 后如何解决 fts5 错误的主要内容,如果未能解决你的问题,请参考以下文章

鹡鸰 2.0 安装错误

如何查找 FTS5 和 MATCH 之间的记录?

如何在 Peewee 和 SQLite 的 FTS5 中使用 trigram tokenizer/similarity 选项?

Sqlite FTS5:使用 Trigram Tokenizer 进行子字符串匹配

如何使用带有 Python 3.7 的 sqlite3 python 模块的 FTS5 扩展?

C# SQLite FTS5 表和触发器创建