2013-10-08 7 views
13

पर चयन करने के लिए पीवी सिंटैक्स मैंने इसे हर जगह शोध किया है और मुझे कोई जवाब नहीं मिल रहा है। मुझे उम्मीद है कि मैंने इसे डुप्लिकेट नहीं किया है (क्योंकि यह एसओ पर मेरा पहला सवाल है)।शून्य क्षेत्र

मैं पेवी के साथ एक चुनिंदा क्वेरी लिखने की कोशिश कर रहा हूं जो आमतौर पर जाता है ... जहां foo = NULL; एसक्यूएल दुनिया में।

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; में समाप्त होना चाहिए लेकिन पेवी में कुछ भी ऐसा नहीं कर रहा है।

क्या कोई मदद कर सकता है? मैं दस्तावेज़ों से क्या लापता हूं?

फू बार उपयोगकर्ता की टिप्पणी से अपडेट किया गया: 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)

दुःख की बात है कि अभी भी सही वाक्य रचना उपज नहीं है अशक्त पंक्तियों पर चयन करने के लिए नष्ट कर दिया है।

+0

शायद 'और –

उत्तर

16

सबसे पहले आपको "और" और "या" के लिए bitwise operands का उपयोग करना होगा। तब के लिए रिक्त है, >> का उपयोग करें:

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

रिक्त नहीं के लिए आप इसे नकारना होगा:

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

यह प्रलेखित है: http://peewee.readthedocs.org/en/latest/peewee/querying.html#query-operators

+0

हाँ Peers.deleted' नहीं! अद्भुत, धन्यवाद! यही जवाब है। – thaavik

+0

क्या 'कोई नहीं' का विकल्प है? यह बिल्कुल सहज नहीं है और क्योंकि मैं हर दिन पेवी का उपयोग नहीं करता हूं, मुझे हर बार इसे देखना पड़ता है :-( – kev

+3

हां, दो तरीकों से। यदि आप '.where (Foo.something == कोई नहीं) 'Peewee चालू हो जाएगा इसे "IS NULL" में बदल दिया जाता है। वैकल्पिक रूप से, आप '.where (Foo.something.is_null (True)) कर सकते हैं। इसी तरह,' .where (Foo.something.is_null (गलत)) '' WHERE foo.something 'का उत्पादन करेगा पूरा नहीं है '। – coleifer

संबंधित मुद्दे