我试图在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"
确实有效。
答案 0 :(得分:4)
SQL参数不能用于值以外的任何内容。使用占位符的重点是正确引用值,以避免将其解释为SQL语句或对象的一部分。
您正在尝试插入对象名称,而不是值,因此您无法使用?
。您必须使用字符串格式,并且要非常小心您允许的名称:
cur = db.execute("SELECT * FROM users ORDER BY {} DESC".format(column_name))
如果column_name
来自用户输入,则您需要针对现有列名进行验证。
另一种方法是使用像SQLAlchemy这样的库来为您生成SQL。请参阅SQL Expression Language tutorial。