簡體   English   中英

python和sqlite3,請檢查是否可以使用fts5擴展名?

[英]python and sqlite3, check if I can use fts5 extension?

我最近發現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都一樣,或者可能都是錯誤的。

/編輯
從文檔中

請注意,啟用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM