SQLALchemy:查询Postgres JSONB列的单个键或键的子集

时间:2019-07-09 05:41:38

标签: python json postgresql orm sqlalchemy

我有一个具有JSONB列的Postgres表。我如何查询此列的数据而不在SQLAlchemy中立即加载整个列?

让我们说JSONB列myjsonb包含{'a': 1, 'b': 2, 'c': 3, ... 'z': 26}。我只想要'a'的值,而不是全部26个值。如何指定查询来做到这一点?

例如,

query = session.query(MyTable).options(defer('myjsonb')).join(MyTable.myjsonb['a'])

不起作用。

有什么主意我只能检索'a'吗?如果没有密钥'a',会发生什么?以及如何加载多个密钥,比如说'b'到'f',但不是一次全部加载?谢谢!

1 个答案:

答案 0 :(得分:1)

这实际上很简单,您只需查询感兴趣的键即可,如下所示:

query = session.query(MyTable.myjsonb['a'])

如果您想从json对象中获取多个键,请说ac

query = session.query(MyTable.myjsonb['a'], MyTable.myjsonb['c'])

如果不存在任何键,它将只为该行返回None