条件值为NULL时返回所有值

时间:2013-09-09 19:08:43

标签: python sql postgresql

假设我有以下非常简单的查询:

query = 'SELECT * FROM table1 WHERE id = %s'

我从python sql包装器中调用它,在本例中为psycopg:

cur.execute(query, (row_id))

问题是如果row_id是None,我想获取所有行,但该查询将返回一个空表。 解决这个问题的简单方法是:

if row_id:
    cur.execute(query, (row_id))
else:
    cur.execute("SELECT * FROM table1")

当然,这是非惯用的,并且对于非平凡的查询会变得不必要地复杂化。我想有一种方法可以在SQL本身处理这个,但找不到任何东西。什么是正确的方法?

2 个答案:

答案 0 :(得分:1)

尝试使用COALESCE功能,如下所示

query = 'SELECT * FROM table1 WHERE id = COALESCE(%s,id)'

答案 1 :(得分:1)

SELECT * FROM table1 WHERE id = %s OR %s IS NULL

但是根据变量如何转发到查询,如果它是None

,最好将其设为0
SELECT * FROM table1 WHERE id = %s OR %s = 0