I have researched this everywhere and can't seem to find an answer. I hope I haven't duplicated this (as it's my first question on SO).
I am trying to write a select query with Peewee that would normally go ... WHERE foo = NULL; in SQL world.
MySQL looks like this:
+-----------+-------------+------+-----+---------+----------------+
| 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 | |
+-----------+-------------+------+-----+---------+----------------+
My select query looks like this:
Peers.select().where(Peers.user == 'foo' and Peers.deleted is None)
But it doesn't work! I've tried Peers.deleted == ""
and Peers.deleted == "NULL"
. The MySQL syntax should end in WHERE deleted is NULL;
but nothing in Peewee seems to be doing that.
Can anyone help? What am I missing from the docs?
Updated from Foo Bar User's comment:
and not Peers.deleted
didn't work, but it led me to more information. It seems that peewee wants the where
clauses chained together. So instead of
Peers.select().where(Peers.user == 'foo' and Peers.deleted is None)
it should be:
Peers.select().where(Peers.user == 'foo').where(Peers.deleted is None)
Sadly, that still doesn't yield the right syntax to select on null rows in deleted.
and not Peers.deleted
– Mythomania