2015-09-09 43 views
2

我在Python中使用psycopg2庫,INSERT查詢適用於當我插入空值與無,但是當我想要做SELECT空值,與None不返回任何。如何使用psycopg中的SELECT查詢來查找空值?

cur.execute("SELECT id FROM registro WHERE id_movil = (%s);", (None,)) 

此查詢不返回任何行,我不知道錯誤在哪裏。

任何人都知道如何使SELECT查詢的在數據庫中找到空值?

回答

3

首先要做的是找出查詢它的轉向你的命令爲:

print(cur.mogrify("SELECT id FROM registro WHERE id_movil = (%s);", (None,))) 

如果給你比IS NULL codition檢查其他任何東西,它不會從表中的NULL。

特別是,如果你看到這句話= NULL,你就會知道它沒有被正確地翻譯(1),你就必須做一些事情,如:

if var is None: 
    cur.execute("SELECT id FROM registro WHERE id_movil IS NULL;") 
else: 
    cur.execute("SELECT id FROM registro WHERE id_movil = (%s);", (var,)) 

或者,如果你知道你「再總是在尋找NULL值(如你不斷None的使用似乎預示着),只需使用:

cur.execute("SELECT id FROM registro WHERE id_movil IS NULL;") 

(1)這很可能是隻有%s替換爲NULL當參數爲None,這是不是很聰明,足以回去改=IS(或<>IS NOT)。

這可以解釋爲什麼這個工程:

cur.execute("INSERT into mytbl value (%s);", (None,)) 

(替代的,因爲只有%s你想要的命令),但預期與= NULL任何不會採取行動,除非你已經被燒燬通過它足夠多的時間知道什麼期望:-)。

+0

謝謝!這工作!如果我想在哪裏做雙重條件?例如id_movil IS NULL和name = xxx?例如: –

+0

@Telmo,假設'xxx'不是None,你可以使用像'cur.execute(「SELECT id FROM registro WHERE id_movil IS NULL and name =(%s);」,('xxx', ))' – paxdiablo

+0

非常感謝@paxdiablo !!有用! –

0

有檢查東西是否是NULL -valued不同的語法:

cur.execute("SELECT id FROM registro WHERE id_movil IS NULL;") 

這同樣適用於獲得的一切,是不是NULL

cur.execute("SELECT id FROM registro WHERE id_movil IS NOT NULL;") 

編輯

您可以使用AND將WHERE子句組合起來,就像您通常所說的那樣:

cur.execute(
    "SELECT id FROM registro WHERE id_movil IS NULL AND name = (%s);", 
    ('Bob',) 
) 
+0

謝謝!這工作!如果我想在哪裏做雙重條件?例如id_movil IS NULL和name = xxx? –

+0

謝謝!有用!! ;) –

1

試試這個

cur.execute("SELECT id FROM registro WHERE (id_movil = (%s) or id_movil is null);", (movil,)) 
相關問題