Синтаксис Peewee для выбора поля null
Я исследовал это везде и, похоже, не могу найти ответ. Надеюсь, я не продублировал это (так как это мой первый вопрос о SO).
Я пытаюсь написать запрос select с помощью Peewee, который обычно идет ... Где 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;
но ничто в Крошке, кажется, не делает этого.
может кто-нибудь помочь? Что мне не хватает в документах?
Обновлено из комментария пользователя foo Bar:
and not Peers.deleted
не сработало, но это привело меня к дополнительной информации. Кажется, что крошка хочет where
пункты соединены друг с другом. Так вместо
Peers.select().where(Peers.user == 'foo' and Peers.deleted is None)
должно быть:
Peers.select().where(Peers.user == 'foo').where(Peers.deleted is None)
к сожалению, это все еще не дает правильного синтаксиса для выбора в нулевых строках в удаленный.
1 ответов
во-первых, вы должны использовать битовые операнды Для "и" и "или". Потом имеет значение null, используйте >>
:
Peers.select().where((Peers.user == 'foo') & Peers.deleted.is_null())
для NOT null вы бы отрицали его:
Peers.select().where(Peers.deleted.is_null(False))
документально подтверждено:http://peewee.readthedocs.org/en/latest/peewee/querying.html#query-operators