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

时间:2017-10-12 14:37:43

标签: python json sqlite sqlalchemy

是否可以使用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

3 个答案:

答案 0 :(得分:6)

我的解决方案是:

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

答案 1 :(得分:5)

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

答案 2 :(得分:3)

SQLAlchemy 1.3将包含对SQLite JSON extension的支持,所以请不要忘记升级:

pip install --user -U --pre SQLAlchemy

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