Ich habe kürzlich herausgefunden, dass FTS5 Erweiterung wurde veröffentlicht.
Was ist der beste Weg zu überprüfen, ob meine Anwendung es auf dem System des Benutzers verwenden kann?
Nur python3 Version überprüfen, oder sqlite3.sqlite_version überprüfen nach release page ?? Oder etwas anderes?Python und sqlite3, prüfen, ob ich fts5 Erweiterung verwenden kann?
Antwort
/diese vorher bearbeiten des OP Post war, aber ich zog es hier unten, die Frage zu halten klar
so fühlt sich das wie es funktionieren kann, ist es in der Frage gefunden 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')
Aber was ist seltsam ist, dass ich es in ein paar virtuelle Maschinen laufen lassen, und keiner hatte fts4 aktiviert, doch ich nutzte es glücklich wie nichts ... vielleicht seine fts3/fts4 ist eher das gleiche, oder vielleicht ist es nur alles falsch.
bearbeiten/
aus der Dokumentation
Hinweis, dass die Aktivierung FTS3 macht auch FTS4 zur Verfügung. Es gibt keine separate SQLITE_ENABLE_FTS4-Kompilierzeitoption. Ein Build von SQLite unterstützt entweder FTS3 und FTS4 oder unterstützt keines von beiden.
Die Dokumentation, die Sie verknüpfen, erwähnt, dass FTS5 standardmäßig deaktiviert ist. Haben Sie es beim Kompilieren von SQLite aktiviert?
Eine schnelle Möglichkeit zu wissen, ist die peewee
ORM zu verwenden:
from playhouse.sqlite_ext import FTS5Model
FTS5Model.fts5_installed()
Die oben kehrt True
wenn Sie FTS5 verwenden können. Sie können peewee
mit pip install peewee
installieren.
Sie könnten auch die apsw
Wrapper verwenden, die includes FTS5 by default since version 3.11.0-r1. Siehe die build instructions und verwenden Sie die --enable-all-extensions
Flagge. Der apsw
Wrapper verwendet die amalgamation.
EDIT: Hier ist der Code aus dem peewee
source demonstriert, wie dies geschehen ist:
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
Bringing Frameworks, die ich nicht verwende, um nur zu überprüfen scheint eher nicht ideal. – DoTheEvo
@DoTheEvo, Yeah, aber du könntest die [peewee Quelle] (https://github.com/coleifer/peewee/blob/master/playhouse/sqlite_ext.py) für dich selbst lesen und sehen, wie es gemacht wird! Die Funktion ist nur 19 Zeilen; Sie müssen nicht wirklich 'peewee' verwenden, kopieren Sie einfach den Code, den Sie brauchen. – ChrisP
[Disclosure: Ich bin der Apsw-Autor] Es gibt keine 100% sichere Möglichkeit, herauszufinden, ob die Erweiterung vorhanden ist, außer indem ich versuche, sie zu benutzen. Die Erweiterung könnte als Teil von SQLite kompiliert oder separat geladen werden. Es gibt auch keine Garantie, dass 'fts5' das ist, was Sie erwarten. In jedem Fall ist der obige Code der robusteste Weg zur Überprüfung. –
Die Antwort gehört nicht in die Frage, sondern in eine Antwort (Sie können Ihre eigene Frage beantworten). Wenn Sie eine neue Frage haben, stellen Sie eine neue Frage. –