2016-04-15 4 views
1

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?

+0

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. –

Antwort

2

/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.

3

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 
+0

Bringing Frameworks, die ich nicht verwende, um nur zu überprüfen scheint eher nicht ideal. – DoTheEvo

+1

@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

+0

[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. –

Verwandte Themen