python 和 sqlite3,检查我是否可以使用 fts5 扩展?
python and sqlite3, check if I can use fts5 extension?
我最近发现 FTS5 扩展已经发布。
检查我的应用程序是否可以在用户系统上使用它的最佳方法是什么?
只是python3版本检查,还是sqlite3.sqlite_version根据release page检查??还是别的?
您 link 提到的文档默认情况下禁用 FTS5。你编译SQLite的时候启用了吗?
一种快速了解的方法是使用 peewee
ORM:
from playhouse.sqlite_ext import FTS5Model
FTS5Model.fts5_installed()
如果您可以使用 FTS5,以上将 return True
。您可以使用 pip install peewee
.
安装 peewee
您也可以使用 apsw
包装器,includes FTS5 by default since version 3.11.0-r1. See the build instructions and use the --enable-all-extensions
flag. The apsw
wrapper uses the amalgamation。
编辑:
下面是来自 peewee
source 的代码,演示了这是如何完成的:
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
/ 这是之前对 OP post 的编辑,但我将其移至此处以明确问题
所以这感觉可行,在问题中找到它 here
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')
但奇怪的是,我运行在几个虚拟机中,none启用了fts4,但我却用得如鱼得水...也许它fts3/fts4 大同小异,也可能全错了。
/编辑
来自文档
Note that enabling FTS3 also makes FTS4 available. There is not a separate SQLITE_ENABLE_FTS4 compile-time option. A build of SQLite either supports both FTS3 and FTS4 or it supports neither.
我最近发现 FTS5 扩展已经发布。
检查我的应用程序是否可以在用户系统上使用它的最佳方法是什么?
只是python3版本检查,还是sqlite3.sqlite_version根据release page检查??还是别的?
您 link 提到的文档默认情况下禁用 FTS5。你编译SQLite的时候启用了吗?
一种快速了解的方法是使用 peewee
ORM:
from playhouse.sqlite_ext import FTS5Model
FTS5Model.fts5_installed()
如果您可以使用 FTS5,以上将 return True
。您可以使用 pip install peewee
.
peewee
您也可以使用 apsw
包装器,includes FTS5 by default since version 3.11.0-r1. See the build instructions and use the --enable-all-extensions
flag. The apsw
wrapper uses the amalgamation。
编辑:
下面是来自 peewee
source 的代码,演示了这是如何完成的:
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
/ 这是之前对 OP post 的编辑,但我将其移至此处以明确问题
所以这感觉可行,在问题中找到它 here
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')
但奇怪的是,我运行在几个虚拟机中,none启用了fts4,但我却用得如鱼得水...也许它fts3/fts4 大同小异,也可能全错了。
/编辑
来自文档
Note that enabling FTS3 also makes FTS4 available. There is not a separate SQLITE_ENABLE_FTS4 compile-time option. A build of SQLite either supports both FTS3 and FTS4 or it supports neither.