【问题标题】:Creating JSON type Column in SQLite with sqlalchemy使用 sqlalchemy 在 SQLite 中创建 JSON 类型的列
【发布时间】:2018-03-24 13:20:12
【问题描述】:

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

【问题讨论】:

  • 您使用的是什么版本的 SQLite?它可能不支持 JSON 类型。
  • SQLite 版本 3.16.0 但是我应该如何检查它是否支持 JSON 类型?

标签: python json sqlite sqlalchemy


【解决方案1】:

我的解决办法是:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      pip install --user -U SQLAlchemy
      

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

      【讨论】:

        猜你喜欢
        • 2018-12-23
        • 1970-01-01
        • 2021-08-31
        • 1970-01-01
        • 2014-10-07
        • 2014-07-15
        • 1970-01-01
        • 1970-01-01
        • 2011-07-15
        相关资源
        最近更新 更多