如何使用SQLAlchemy查询JSON类型的字段?

时间:2015-08-04 08:32:21

标签: json sqlite sqlalchemy

这只是一个简单的例子。

field = [[1,12,6], [2,12,8]]

我想在sqlite3数据库中使用SQLAlchemy将它存储在json类型的字段中。

但是如何使用SQLAlchemy(而不是SQL)查询? e.g。

  • len(字段)为3的行
  • 行wehre field [1] [2]不是12
  • 行wehre len(字段[*])不是3
  • 按字段分组[2]
  • sum field [1]其中field [0]为1

甚至可能吗?

使用经典的多对多表(包括链接表)而不是json-field来实现它可能会更容易吗?

1 个答案:

答案 0 :(得分:2)

根据官方文档,这些是SQLAlchemy为JSON字段提供的可用方法。

JSON提供了几个操作:

索引操作:

data_table.c.data['some key']

索引操作返回文本(文本比较所需):

data_table.c.data['some key'].astext == 'some value'

内置CAST调用的索引操作:

data_table.c.data['some key'].cast(Integer) == 5

路径索引操作:

data_table.c.data[('key_1', 'key_2', ..., 'key_n')]

返回文本的路径索引操作(文本比较所需):

data_table.c.data[('key_1', 'key_2', ..., 'key_n')].astext == \
'some value'

http://docs.sqlalchemy.org/en/latest/dialects/postgresql.html#sqlalchemy.dialects.postgresql.JSON

根据我对PostgreSQL中JSON类型的了解,它最好只在你需要整个JSON对象时才使用。如果要在JSON对象的字段上进行类似操作的SQL,那么最好使用经典的SQL关系。这是我发现的同一件事的一个来源,但还有更多。 http://blog.2ndquadrant.com/postgresql-anti-patterns-unnecessary-jsonhstore-dynamic-columns/