Python 内で SQLite の json1 拡張機能を使用したいと考えています。公式ドキュメントによると、ロード可能な拡張機能である必要があります。ソースから json1.c ファイルを取得し、エラーなしで公式の指示に従ってjson1.so にコンパイルしました。
$ gcc -g -fPIC -shared json1.c -o json1.so
sqlite3 documentationに従って、Python 2.7.12 (および 3.5.2) で拡張機能をロードしようとしたときに問題が発生しました。
>>> import sqlite3
>>> con = sqlite3.connect(":memory:")
>>> con.enable_load_extension(True)
>>> con.load_extension("./json1.so")
次のトレースバック エラー メッセージを受け取りました。json1.so ファイルが含まれるフォルダーから Python インタープリターを実行しました。最後のコロンのおかげでもっと情報があるはずですが、以下は完全なエラー メッセージです。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
sqlite3.OperationalError: error during initialization:
Python内でjson1をロード可能な拡張機能として使用することは実際には不可能ですか? Charles Leifer によるこのブログ投稿で説明されているように、SQLite、pysqlite2 などを再コンパイルする唯一のオプションはありますか?
編集:
結局のところ、私のマシンには既にこの拡張機能と他の拡張機能が既に有効になっているため、エラーが発生していました。すでに有効になっている拡張機能を有効にするアクションがエラーを引き起こしました。これまでのところ、私がアクセスできるすべての Linux コンピューターでは、Python に付属の SQLite で json1 および fts5 拡張機能が既に有効になっています。SQLite データベースに接続して次のクエリを実行すると、どのコンパイル オプションが使用されたかを確認できます。
PRAGMA compile_options;