2

将烧瓶中的查询字符串变量作为 WHERE 子句中的参数传递给 psycopg 的正确方法是什么?

具体来说,如果未设置变量,我不希望将变量添加到 WHERE 子句中:

 id = int(request.args.get('id'))
 cur.execute("SELECT * FROM data WHERE id = %s;", id)

如果 id 是 None,我想要没有 WHERE 子句的 SQL:

SELECT * FROM data

这样做的唯一方法是使用 if 语句吗?

4

1 回答 1

3

id如果未提供(有效)查询参数,只需发出不同的查询:

id = request.args.get('id', type=int)
if id is not None:
    cur.execute("SELECT * FROM data WHERE id = %s", (id,))
else:
    # No (valid) id given, give everything
    cur.execute("SELECT * FROM data")

请注意,我为方法type使用了关键字参数;如果键丢失或无法转换为整数,则该方法返回默认值(除非通过参数另行指定)。MultiDict.get()Nonedefault

于 2016-06-05T22:09:30.200 回答