python - all - peewee tutorial
Sintaxis de Peewee para seleccionar en campo nulo (1)
Primero, debe usar los operandos en modo bit para "y" y "o". Entonces para es nulo, use >>
:
Peers.select().where((Peers.user == ''foo'') & Peers.deleted.is_null())
Para no nulo lo negarías:
Peers.select().where(Peers.deleted.is_null(False))
Está documentado: http://peewee.readthedocs.org/en/latest/peewee/querying.html#query-operators
He investigado esto en todas partes y parece que no puedo encontrar una respuesta. Espero no haber duplicado esto (ya que es mi primera pregunta sobre SO).
Estoy tratando de escribir una consulta de selección con Peewee que normalmente iría ... WHERE foo = NULL; en el mundo SQL.
MySQL se ve así:
+-----------+-------------+------+-----+---------+----------------+
| 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 | |
+-----------+-------------+------+-----+---------+----------------+
Mi consulta de selección se ve así:
Peers.select().where(Peers.user == ''foo'' and Peers.deleted is None)
¡Pero no funciona! Intenté Peers.deleted == ""
y Peers.deleted == "NULL"
. La sintaxis de MySQL debe terminar en WHERE deleted is NULL;
pero nada en Peewee parece estar haciendo eso.
¿Alguien puede ayudar? ¿Qué me estoy perdiendo de los documentos?
Actualizado desde el comentario del usuario de Foo Bar: and not Peers.deleted
no funcionó, pero me llevó a más información. Parece que el peewee quiere las cláusulas where
encadenadas juntas. Entonces, en lugar de
Peers.select().where(Peers.user == ''foo'' and Peers.deleted is None)
debería ser:
Peers.select().where(Peers.user == ''foo'').where(Peers.deleted is None)
Lamentablemente, eso aún no produce la sintaxis correcta para seleccionar en filas nulas en eliminado.