web-dev-qa-db-ja.com

sqlalchemyを使用してSQLiteでJSONタイプの列を作成する

Sqlalchemyを使用してSQLiteでJSONタイプの列を作成することは可能ですか?私はもう試した

import sqlalchemy.types as types
...
myColumn = Column(types.JSON())

そして

from sqlalchemy import JSON
...
mycolumn = Column(JSON) 

両方ともエラーメッセージを受け取ります:

コンパイラはタイプの要素をレンダリングできません

Sqlalchemyに解決策があるのか​​、それとも代わりにSQLに変更する必要があるのか​​疑問に思います。前もって感謝します。

[アップデート] SQLiteバージョン3.16.0

10
Satty

JSONはバージョン3.9までSQLiteに追加されませんでした。 SQLiteをアップグレードするか、jsonを文字列に変換して保存し、引き出したときにjsonオブジェクトに変換し直す必要があります。

6
Martin Lear

私の解決策は次のとおりです。

import json
from sqlalchemy import TypeDecorator, types

class Json(TypeDecorator):

    @property
    def python_type(self):
        return object

    impl = types.String

    def process_bind_param(self, value, dialect):
        return json.dumps(value)

    def process_literal_param(self, value, dialect):
        return value

    def process_result_value(self, value, dialect):
        try:
            return json.loads(value)
        except (ValueError, TypeError):
            return None

...

myColumn = Column("name", Json)

詳細情報: TypeDecorator

7
Xiwei Wang

SQLAlchemy 1. には SQLite JSON拡張 のサポートが含まれるため、アップグレードすることを忘れないでください。

pip install --user -U --pre SQLAlchemy

方言固有のタイプ sqlite.JSON 基本タイプを介して使用可能なJSONメンバーアクセスを実装します types.JSON 同様に。

4
theotheo