我正在使用JSON SQLAlchemy列,我的查询语句需要' has_key'属性,但显然我的'比较器'对象没有此属性。
Transaction.query.filter(Transaction.fields.has_key('issuername')).all()
其中Transaction.fields是一个列(JSON)。我得到了错误"属性错误:没有' InstrumentedAttribute'对象也不是'比较器'与Transaction.fields相关联的对象具有属性' has_key'"。我的SQLAlchemy是最新版本1.09。我是否构建此查询错误?
答案 0 :(得分:2)
has_key
运算符特定于JSONB
JSONB
类型包括JSON
提供的所有操作,包括 索引操作的相同行为。它还增加了额外的 特定于JSONB
的运算符,包括JSONB.Comparator.has_key()
,JSONB.Comparator.has_all()
,JSONB.Comparator.has_any()
,JSONB.Comparator.contains()
和JSONB.Comparator.contained_by()
。
对于JSON列,您可以使用->
PostgreSQL运算符(按键获取JSON对象字段)
Transaction.query.filter(Transaction.fields.op('->')('issuername')!=None).all()