20

私はこれをどこでも調査しましたが、答えが見つからないようです。これを複製していないことを願っています(SOに関する最初の質問であるため)。

通常は... WHERE foo = NULL; になるPeeweeを使用して選択クエリを作成しようとしています。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)

悲しいことに、削除された null 行を選択するための正しい構文はまだ得られません。

4

1 に答える 1

34

まず、「and」と「or」にビット単位のオペランドを使用する必要があります。次に、null の場合は、次を使用します>>

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

null でない場合は、それを否定します。

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

文書化されています:http://peewee.readthedocs.org/en/latest/peewee/querying.html#query-operators

于 2013-10-10T21:42:13.243 に答える