我有一个 JSONB 字段,有时有嵌套键。例子:
{"nested_field": {"another URL": "foo", "a simple text": "text"},
"first_metadata": "plain string",
"another_metadata": "foobar"}
If I do
.filter(TestMetadata.metadata_item.has_key(nested_field))
我得到了这个记录。
如何搜索嵌套键是否存在? ("a simple text"
)
使用 SQLAlchemy,以下内容应该适用于您的测试字符串:
class TestMetadata(Base):
id = Column(Integer, primary_key=True)
name = Column(String)
metadata_item = Column(JSONB)
as per SQLAlchemy 文档JSONB(搜索路径索引操作例子):
expr = TestMetadata.metadata_item[("nested_field", "a simple text")]
q = (session.query(TestMetadata.id, expr.label("deep_value"))
.filter(expr != None)
.all())
这应该生成SQL
below:
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}'}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)