我在Python中使用psycopg2庫,INSERT
查詢適用於當我插入空值與無,但是當我想要做SELECT
空值,與None不返回任何。如何使用psycopg中的SELECT查詢來查找空值?
cur.execute("SELECT id FROM registro WHERE id_movil = (%s);", (None,))
此查詢不返回任何行,我不知道錯誤在哪裏。
任何人都知道如何使SELECT
查詢的在數據庫中找到空值?
我在Python中使用psycopg2庫,INSERT
查詢適用於當我插入空值與無,但是當我想要做SELECT
空值,與None不返回任何。如何使用psycopg中的SELECT查詢來查找空值?
cur.execute("SELECT id FROM registro WHERE id_movil = (%s);", (None,))
此查詢不返回任何行,我不知道錯誤在哪裏。
任何人都知道如何使SELECT
查詢的在數據庫中找到空值?
首先要做的是找出查詢它的轉向你的命令爲:
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
任何不會採取行動,除非你已經被燒燬通過它足夠多的時間知道什麼期望:-)。
有檢查東西是否是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',)
)
謝謝!這工作!如果我想在哪裏做雙重條件?例如id_movil IS NULL和name = xxx? –
謝謝!有用!! ;) –
試試這個
cur.execute("SELECT id FROM registro WHERE (id_movil = (%s) or id_movil is null);", (movil,))
謝謝!這工作!如果我想在哪裏做雙重條件?例如id_movil IS NULL和name = xxx?例如: –
@Telmo,假設'xxx'不是None,你可以使用像'cur.execute(「SELECT id FROM registro WHERE id_movil IS NULL and name =(%s);」,('xxx', ))' – paxdiablo
非常感謝@paxdiablo !!有用! –