2013-10-08 8 views
13

私はこれをあらゆるところで研究しており、答えを見つけることができないようです。私はこれを複製していないことを望みます(それは私の最初の質問です)。nullフィールドで選択するPeewee構文

私は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は機能しませんでしたが、より多くの情報が得られました。ピーエーは、whereの節をつなぎたいと思うようです。だからではなく、

Peers.select().where(Peers.user == 'foo' and Peers.deleted is None)

のそれは次のようになります。削除にはまだ右の構文を得られない

悲しいこと

Peers.select().where(Peers.user == 'foo').where(Peers.deleted is None)

は、ヌル行に選択します。

+0

'と –

答えて

16

まず、 "and"と "or"のビット単位のオペランドを使用する必要があります。 nullであるためその後、>>を使用します。多分http://peewee.readthedocs.org/en/latest/peewee/querying.html#query-operators

+0

はいを​​Peers.deleted'ない:

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

それが文書化されています

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

をnullではないために、あなたはそれを否定するだろう!素晴らしい、ありがとう!それが答えです。 – thaavik

+0

'' None''に代わるものはありますか?それは直感的ではないし、毎日私はそれを見なければならない毎日peeweeを使用しない:-( – kev

+3

はい、2つの方法。あなたが '.where(Foo.something == None)'を行うならPeeweeは同様に、 '.where(Foo.something.is_null(False))'は 'WHERE foo.something 'を生成します。 IS NOT NULL 'である。 – coleifer

関連する問題