2013-10-08 6 views
13

나는 여기를 조사하고 대답을 찾지 못하는 것 같습니다. 나는 이것이 (나는 그것에 관한 나의 첫 번째 질문 인 것처럼) 이것을 복제하지 않았기를 바란다.null 필드에서 선택하기위한 피어 (Peewee) 구문

Peewee를 사용하여 선택 쿼리를 작성하려고하는데 일반적으로 ... where foo = NULL; SQL 세계에서.

+-----------+-------------+------+-----+---------+----------------+ 
| 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) 

을하지만 그것은 작동하지 않습니다

MySQL은 다음과 같습니다! 나는 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 행을 선택할 수 있습니다.

+0

'와 –

답변

16

먼저 "and"및 "or"에 대해 비트 피연산자를 사용해야합니다. 널 위해 그런 >>를 사용 어쩌면 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

''없음 '에 대한 대안이 있습니까? 그것은 직관적이지 않으며 매일 peewee를 사용하지 않기 때문에 매번 그것을 봐야합니다 :-( – kev

+3

예, 두 가지 방법. '.where (Foo.something == None)'하면 Peewee가 마찬가지로,'.where (Foo.something.is_null (False))'는'WHERE foo.something '을 생성 할 것입니다. IS NOT NULL'입니다. – coleifer