0

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

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 本身中处理这个问题,但找不到任何东西。什么是正确的方法?

4

2 回答 2

1

尝试使用COALESCE功能如下

query = 'SELECT * FROM table1 WHERE id = COALESCE(%s,id)'
于 2013-09-09T19:10:31.163 回答
1
SELECT * FROM table1 WHERE id = %s OR %s IS NULL

但是根据变量如何转发到查询,如果它是 None 可能会更好地将其设为 0

SELECT * FROM table1 WHERE id = %s OR %s = 0
于 2013-09-09T19:10:52.020 回答