2016-04-15 5 views
1

私は最近、FTS5拡張がリリースされたことを知りました。
私のアプリケーションがユーザーシステム上でそれを使用できるかどうかを確認する最良の方法は何ですか?
python3のバージョンチェック、またはrelease pageに従ってsqlite3.sqlite_versionのチェック?または、他の何か?pythonとsqlite3、私がfts5拡張子を使用できるかどうかを確認しますか?

+0

答えは質問に属するのではなく、答えになります(あなた自身の質問に答えることができます)。新しい質問がある場合は、新しい質問をしてください。 –

答えて

2

/これは以前にOPポストの編集だったが、私は質問を保つために、ここでそれを下に移動それは仕事ができるように明確な

ので、これは問題here

でそれを見つけ、感じています

しかし、私はいくつかの仮想マシンで実行し、fts4は有効にしていませんでしたが、私はそれを幸せに何も使っていませんでした...おそらくfts3/fts4はむしろ同じか、違う。 FTS3を有効にするともFTS4が利用できるようにすることを文書

ノートから

/編集
。 SQLite_ENABLE_FTS4コンパイル時オプションは別途ありません。 SQLiteのビルドは、FTS3とFTS4の両方をサポートするか、どちらもサポートしません。

3

FTS5がデフォルトで無効になっていることをリンク先のドキュメントに記載しています。 SQLiteをコンパイルするときに有効にしましたか?知って

一つの簡単な方法を使用することですpeewee ORM

from playhouse.sqlite_ext import FTS5Model 
FTS5Model.fts5_installed() 

あなたがFTS5を使用できる場合は、上記Trueを返します。 pip install peeweepeeweeをインストールできます。

apswラッパー(includes FTS5 by default since version 3.11.0-r1)を使用することもできます。 build instructionsを参照し、--enable-all-extensionsフラグを使用してください。 apswラッパーはamalgamationを使用します。

編集:ここでは はこれがどのように行われるかを実証peewee sourceからのコードです:

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

フレームワークを持ってきている私はちょうどチェックのためにこれに使用しませんが、理想的ではないようです。 – DoTheEvo

+1

@DoTheEvo、そうだけど、あなたは[peewee source](https://github.com/coleifer/peewee/blob/master/playhouse/sqlite_ext.py)を読んで、それがどのように完了したかを見ることができます!関数はわずか19行です。あなたは実際に 'peewee'を使う必要はなく、必要なコードをコピーするだけです。 – ChrisP

+0

[開示:私はapswの著者です]それを使用しようとした以外に拡張子が存在するかどうかを調べる方法は100%ありません。エクステンションはSQLiteの一部としてコンパイルすることも、個別にロードすることもできます。 「fts5」があなたが期待しているものであるという保証もありません。いずれにしても、上記のコードは最も確かなチェック方法です。 –

関連する問題