#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.