python和sqlite3,检查我是否可以使用fts5扩展



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

/这是之前对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是完全相同的,或者可能完全错了。

/edit
来自文件

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

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

一个快速知道的方法是使用peewee ORM:

from playhouse.sqlite_ext import FTS5Model
FTS5Model.fts5_installed()

如果您可以使用FTS5,则以上内容将返回True。您可以将peeweepip 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

相关内容

最新更新