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. –
- 1. Wie kann ich prüfen, ob PDF-Dateien korrekt generiert wurden?
- 2. Python Befehlszeilenargument und SQlite3-Zugriff
- 3. Prüfen, ob die Chrome-Erweiterung im entpackten Modus installiert ist
- 4. , wie zu prüfen, ob Erweiterung, wenn Varibale enthält einige Dateierweiterungen
- 5. Python: Verwenden von sqlite3 mit Multiprocessing
- 6. Kann MySQL prüfen, ob die Datei existiert?
- 7. sqlite3 in Python
- 8. Wie kann ich das sqlite3-Paket in Python 2.6 aktualisieren?
- 9. Finden und prüfen, ob negative Write
- 10. Kann ich Ruby und Python zusammen verwenden?
- 11. Wie kann ich prüfen, ob eine App auf Android läuft?
- 12. Wie kann ich prüfen, ob eine Zeichenfolge nur Buchstaben enthält?
- 13. Wie kann ich prüfen, ob Textarea (Tinymce) nur Platz enthält?
- 14. Kann ich prüfen, ob ein UIAlertView gerade angezeigt wird?
- 15. prüfen, ob eine Befehlsausgabe erzeugt
- 16. Wie kann ich prüfen, ob eine SQL Server-Einschränkung existiert?
- 17. Wie kann ich prüfen, ob ein MATLAB-Handle gültig ist?
- 18. Wie kann ich prüfen, ob "caplaythrough" wahr ist?
- 19. Wie kann ich prüfen, ob ein Double einen Bruchteil hat?
- 20. Wie kann ich prüfen, ob eine Variable in Scheme existiert?
- 21. C# Kann ich prüfen, ob IntPtr null ist?
- 22. Wie kann ich prüfen, ob ein JavaScript-Eventhandler eingerichtet wurde?
- 23. Prüfen, ob der MySQL-Server Verbindungen akzeptieren kann
- 24. Welches Volltextsuchpaket sollte ich für SQLite3 verwenden?
- 25. sqlite3 und cursor.description
- 26. Wie kann ich das sqlite3-Modul in Python 2.4 importieren?
- 27. sqlite3 python Spalten hinzufügen und Werte aktualisieren
- 28. kann ich "http header" verwenden, um zu prüfen, ob eine dynamische Seite geändert wurde
- 29. Prüfen, ob ein Objekt ist
- 30. Wie kann ich prüfen, ob ein Typ ein Untertyp eines Typs in Python ist?
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. –