假设我有以下非常简单的查询:
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本身处理这个,但找不到任何东西。什么是正确的方法?
答案 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
,最好将其设为0SELECT * FROM table1 WHERE id = %s OR %s = 0