Peewee选择空字段的语法

24

我已经在各处进行了调查,但似乎找不到答案。 希望我没有重复提问(因为这是我在 SO 上的第一个问题)。

我正在尝试使用 Peewee 编写 select 查询,通常在 SQL 世界中会写成 WHERE foo = NULL;。

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)

不幸的是,这仍然不能产生选择删除行的正确语法。


也许 and not Peers.deleted - Foo Bar User
1个回答

39

有没有其他替代选项可以代替 ">> None"?这太难理解了,而且我不经常使用 peewee,每次都需要查阅资料 :-( - kev
7
是的,有两种方法。如果你使用.where(Foo.something == None),Peewee会将其转换为"IS NULL"。或者,你可以使用.where(Foo.something.is_null(True))。同样,.where(Foo.something.is_null(False)) 将生成 WHERE foo.something IS NOT NULL - coleifer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接