Подтвердить что ты не робот

Синтаксис Peewee для выбора нулевого поля

Я исследовал это повсюду и не могу найти ответа. Надеюсь, я не дублировал это (как мой первый вопрос о SO).

Я пытаюсь написать select-запрос с Peewee, который обычно идет... WHERE foo = NULL; в мире SQL.

MySQL выглядит так:

+-----------+-------------+------+-----+---------+----------------+  
| Field     | Type        | Null | Key | Default | Extra          |  
+-----------+-------------+------+-----+---------+----------------+  
| id        | bigint(20)  | NO   | PRI | NULL    | auto_increment |  
| user      | varchar(30) | NO   |     | NULL    |                |  
| peer      | varchar(30) | NO   |     | NULL    |                |  
| deleted   | date        | YES  |     | NULL    |                |  
| confirmed | date        | YES  |     | NULL    |                |  
+-----------+-------------+------+-----+---------+----------------+  

Мой запрос выбора выглядит так:

Peers.select().where(Peers.user == 'foo' and Peers.deleted is None)

Но это не сработает! Я пробовал Peers.deleted == "" и Peers.deleted == "NULL". Синтаксис MySQL должен заканчиваться на WHERE deleted is NULL;, но ничто в Peewee, похоже, не делает этого.

Может ли кто-нибудь помочь? Что мне не хватает в документах?

Обновлено с Foo Bar Комментарий пользователя: and not Peers.deleted не работал, но это привело меня к дополнительной информации. Кажется, что peewee хочет, чтобы предложения where были соединены вместе. Поэтому вместо

Peers.select().where(Peers.user == 'foo' and Peers.deleted is None)

это должно быть:

Peers.select().where(Peers.user == 'foo').where(Peers.deleted is None)

К сожалению, это все еще не дает правильного синтаксиса для выбора нулевых строк при удалении.

4b9b3361

Ответ 1

Сначала вы должны использовать побитовые операнды для "и" и "или". Тогда для значение null, используйте >>:

Peers.select().where((Peers.user == 'foo') & Peers.deleted.is_null())

Для не null вы можете свести его на нет:

Peers.select().where(Peers.deleted.is_null(False))

Документировано: http://peewee.readthedocs.org/en/latest/peewee/querying.html#query-operators