sqlalchemy JSON запрашивает строки без определенного ключа (наличие ключа)

#python #postgresql #sqlalchemy

#python #postgresql #sqlalchemy

Вопрос:

При использовании sqlalchemy с postgresql у меня есть следующая таблица и данные:

  id |   data   
---- ----------
  1 | {}
  2 | {"a": 1}
(2 rows)
  

Как мне найти строки, у которых нет ключа. например, «a» или data [«a»]?

 Give me all objects that does not have the key a.
 id |   data   
---- ----------
  1 | {}
(1 row)
  

 self.session.query(Json_test).filter(???)
  

Ответ №1:

Если тип столбца jsonb равен, вы можете использовать has_key :

 session.query(Json_test).filter(sqlalchemy.not_(Json_test.data.has_key('a')))
  

Для обоих json jsonb типов и это должно работать:

 session.query(Json_test).filter(Json_test.data.op('->')('a')==None)
  

Комментарии:

1. .has_key теперь устарел … я использовал вариант вашего второго ответа: not_(Json_test.data.op('?')('a')

2. @nihilok — Вы путаете SQLAlchemy has_key() с dict.has_key() . Первый в порядке, второй был удален в Python3.