【问题标题】:Peewee syntax for selecting on null field用于选择空字段的 Peewee 语法
【发布时间】:2013-10-08 22:54:19
【问题描述】:

我到处研究过这个问题,但似乎找不到答案。我希望我没有重复这个(因为这是我关于 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)

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

【问题讨论】:

  • 也许是and not Peers.deleted

标签: python mysql null isnull peewee


【解决方案1】:

首先,您必须对“and”和“or”使用按位操作数。然后for为null,使用>>

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

对于 not null 你会否定它:

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

记录在案:http://peewee.readthedocs.org/en/latest/peewee/querying.html#query-operators

【讨论】:

  • >> None 有替代品吗?它根本不直观,因为我不是每天都使用 peewee,所以我每次都必须查找它:-(
  • 是的,有两种方法。如果您这样做 .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
猜你喜欢
  • 2019-05-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 2015-02-21
  • 2012-04-05
相关资源
最近更新 更多