SQLite3查询ORDER BY参数用?符号

时间:2016-09-18 15:01:36

标签: python sqlite

我试图在python中使用sqlite3进行查询,由参数列" overall_risk"进行排序。或者" latest_risk" (这是双数)

param = ('overall_risk',)
cur = db.execute("SELECT * FROM users ORDER BY ? DESC", param)

但是,我没有返回"overall_risk"(或"latest_risk")订购的数据, 而且,当我写下这样的查询时:

"SELECT * FROM users ORDER BY " + 'overall_risk' + " DESC"

确实有效。

1 个答案:

答案 0 :(得分:4)

SQL参数不能用于以外的任何内容。使用占位符的重点是正确引用值,以避免将其解释为SQL语句或对象的一部分。

您正在尝试插入对象名称,而不是值,因此您无法使用?。您必须使用字符串格式,并且要非常小心您允许的名称:

cur = db.execute("SELECT * FROM users ORDER BY {} DESC".format(column_name))

如果column_name来自用户输入,则您需要针对现有列名进行验证。

另一种方法是使用像SQLAlchemy这样的库来为您生成SQL。请参阅SQL Expression Language tutorial