[英]python and sqlite3, check if I can use fts5 extension?
/這是先前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,要么不支持。
鏈接到的文檔提到默認情況下FTS5是禁用的。 在編譯SQLite時是否啟用了它?
一種快速了解的方法是使用peewee
ORM :
from playhouse.sqlite_ext import FTS5Model
FTS5Model.fts5_installed()
如果可以使用FTS5,則以上內容將返回True
。 您可以安裝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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.