【发布时间】:2017-05-16 18:04:49
【问题描述】:
我有一个带有 JSONB 列的简单表。在该字段中,我有一个键:key,key 的值可以是带有["val1", "val2"] 的列表或单个字符串"val2"。
当key 中的值是"val2" 时,我得到了一个原始 SQL 查询:
SELECT t.c FROM t WHERE t.c->'key' ? "val2"
但是,我正在努力在 SQLAlchemy 查询中复制它:
我有一个session
query = session.query(t).filter(t.c.has_key('val2'))
导致
SELECT t.c FROM t WHERE t.c ? 'val2' 但我希望 ? 运算符在 -> 上。
获得->(据我所知)的唯一方法是使用filter(t.c['key2'])。但是,然后我无法执行has_key() 我得到:
AttributeError: Neither 'JSONElement' object nor 'Comparator' object has an attribute 'has_key'
有什么想法吗?
【问题讨论】:
-
虽然可能不是最佳选择,但您可以使用
filter(t.c['key2'].op('?')('val2'))解决此问题,或更新您的 SQLAlchemy。在这种情况下,较新的版本可以正常工作。 -
或:
filter(t.c['key'].has_key('val2')) -
@IljaEverilä 不错,您能否将其添加为答案,我会接受。谢谢。
标签: python sqlalchemy