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