使用sqlalchemy在SQLite中创建JSON类型列

Sat*_*tty 10 python sqlite json sqlalchemy

是否可以使用sqlalchemy在SQLite中创建JSON类型的列?我试过了

import sqlalchemy.types as types
...
myColumn = Column(types.JSON())
Run Code Online (Sandbox Code Playgroud)

from sqlalchemy import JSON
...
mycolumn = Column(JSON) 
Run Code Online (Sandbox Code Playgroud)

两者都收到错误消息:

编译器无法呈现类型的元素

想知道sqlalchemy中是否有任何解决方案,或者我应该改为SQL.提前致谢.

[更新] SQLite版本3.16.0

Xiw*_*ang 7

我的解决方案是:

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)
Run Code Online (Sandbox Code Playgroud)

有关更多信息:TypeDecorator


小智 6

直到版本3.9,JSON才被添加到SQLite.您需要升级SQLite或将json转换为字符串并保存它,同时将其拉出时将其转换回json对象.


the*_*heo 6

SQLAlchemy 1.3将包括对SQLite JSON 扩展的支持,所以不要忘记升级:

pip install --user -U --pre SQLAlchemy
Run Code Online (Sandbox Code Playgroud)

方言特定类型sqlite.JSON实现 JSON 成员访问,也可通过基本类型使用types.JSON