加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLAlchemy根据JSONB中的嵌套键进行过滤

发布时间:2020-12-13 16:13:03 所属栏目:百科 来源:网络整理
导读:我有一个 JSONB字段,有时有嵌套键.例: {“nested_field”:{“另一个URL”:“foo”,“一个简单的文本”:“text”},“first_metadata”:“plain string”,“another_metadata”:“foobar”} 如果我做 .filter(TestMetadata.metadata_item.has_key(nested
我有一个 JSONB字段,有时有嵌套键.例:

{“nested_field”:{“另一个URL”:“foo”,“一个简单的文本”:“text”},“first_metadata”:“plain string”,“another_metadata”:“foobar”}

如果我做
.filter(TestMetadata.metadata_item.has_key(nested_field))
我得到了这个记录.

如何搜索嵌套密钥的存在? (“一个简单的文字”)

使用SQLAlchemy,以下内容适用于您的测试字符串:
class TestMetadata(Base):
    id = Column(Integer,primary_key=True)
    name = Column(String)
    metadata_item = Column(JSONB)

按照SQLAlchemy documentation of JSONB(搜索Path索引操作示例):

expr = TestMetadata.metadata_item[("nested_field","a simple text")]
q = (session.query(TestMetadata.id,expr.label("deep_value"))
     .filter(expr != None)
     .all())

哪个应生成以下SQL:

SELECT  testmetadata.id AS testmetadata_id,testmetadata.metadata_item #> %(metadata_item_1)s AS deep_value
FROM    testmetadata
WHERE  (testmetadata.metadata_item #> %(metadata_item_1)s) IS NOT NULL
-- @params: {'metadata_item_1': u'{nested_field,a simple text}'}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读