5

我最近发现FTS5扩展已经发布。
检查我的应用程序是否可以在用户系统上使用它的最佳方法是什么?
只是 python3 版本检查,或 sqlite3.sqlite_version 根据发布页面检查??或者是其他东西?

4

2 回答 2

9

/ 这是之前对 OP 帖子的编辑,但我将其移至此处以保持问题清晰

所以这感觉它可以工作,在这里的问题中找到了它

import sqlite3

con = sqlite3.connect(':memory:')
cur = con.cursor()
cur.execute('pragma compile_options;')
available_pragmas = cur.fetchall()
con.close()

print(available_pragmas)

if ('ENABLE_FTS5',) in available_pragmas:
    print('YES')
else:
    print('NO')

但奇怪的是,我在几个虚拟机中运行它,没有一个启用 fts4,但我很高兴地使用它……也许它的 fts3/fts4 几乎相同,或者它完全错了。

/
从文档中编辑

请注意,启用 FTS3 也会使 FTS4 可用。没有单独的 SQLITE_ENABLE_FTS4 编译时选项。SQLite 的构建要么支持 FTS3 和 FTS4,要么都不支持。

于 2016-04-16T11:14:17.420 回答
4

您链接到的文档提到默认情况下禁用 FTS5。你在编译 SQLite 时启用它了吗?

一种快速了解的方法是使用peeweeORM

from playhouse.sqlite_ext import FTS5Model
FTS5Model.fts5_installed()

True如果您可以使用 FTS5 ,上述内容将返回。您可以peewee使用pip install peewee.

您还可以使用apsw包装器,它从 3.11.0-r1 版本开始默认包含 FTS5。请参阅构建说明并使用--enable-all-extensions标志。apsw包装器使用合并

编辑: 这是来自peewee代码的代码,演示了这是如何完成的:

def fts5_installed(cls):
    if sqlite3.sqlite_version_info[:3] < FTS5_MIN_VERSION:
        return False

    # Test in-memory DB to determine if the FTS5 extension is installed.
    tmp_db = sqlite3.connect(':memory:')
    try:
        tmp_db.execute('CREATE VIRTUAL TABLE fts5test USING fts5 (data);')
    except:
        try:
            sqlite3.enable_load_extension(True)
            sqlite3.load_extension('fts5')
        except:
            return False
        else:
            cls._meta.database.load_extension('fts5')
    finally:
        tmp_db.close()

    return True
于 2016-04-15T20:25:19.593 回答