将flask中的查询字符串变量作为WHERE子句中的参数传递给psycopg的正确方法是什么?
具体来说,如果未设置变量,我不希望将变量添加到WHERE子句中:
id = int(request.args.get('id'))
cur.execute("SELECT * FROM data WHERE id = %s;", id)
如果id为None,我希望SQL没有WHERE子句:
SELECT * FROM data
唯一的方法是使用if语句吗?
答案 0 :(得分: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")
请注意,我为MultiDict.get()
method使用了type
关键字参数;如果密钥丢失或无法转换为整数,则该方法返回默认值(None
,除非通过default
参数另行指定)。