python - 用于在空字段上选择的 Peewee 语法

标签 python mysql null isnull peewee

我到处都研究过这个问题,但似乎找不到答案。我希望我没有重复这个(因为这是我关于 SO 的第一个问题)。

我正在尝试使用 Peewee 编写一个通常会去的选择查询... WHERE 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)

遗憾的是,这仍然没有产生正确的语法来选择已删除的空行。

最佳答案

首先,您必须使用“与”和“或”的按位操作数。那么for为null,使用>>:

Peers.select().where((Peers.user == 'foo') & Peers.deleted.is_null())

对于 not null 你会否定它:

Peers.select().where(Peers.deleted.is_null(False))

记录在案:https://peewee.readthedocs.io/en/latest/peewee/query_operators.html#query-operators

关于python - 用于在空字段上选择的 Peewee 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19259964/

相关文章:

php - Mysql_query 返回值一但数据库不受影响

Python正则表达式模式定义不包括字符

php - 使用 jQuery AJAX 从 MYSQL 检索数据的困难

python - 隐藏图例中的图例条目

mysql - Microsoft动态 Access 基于Web的格式

mysql - ruby MySQL 返回#<Mysql :0x000000016f3780> and not nil

java - 如何为空参数进行方法重载?

php - Symfony-在null上调用成员函数setFunction()

python - 在 PyQt 中打印图像时出错

python - 重新排列 Pandas 中的数据