我正在尝试使用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"
它确实有效.
解决方法:
SQL参数只能用于值.使用占位符的全部要点是正确引用该值,以避免将其解释为SQL语句的一部分或对象.
您试图插入一个对象名,而不是一个值,所以您不能使用?为了这.您将必须使用字符串格式,并且在允许使用的名称方面要格外小心:
cur = db.execute("SELECT * FROM users ORDER BY {} DESC".format(column_name))
如果column_name来自用户输入,则需要针对现有的列名进行验证.
替代方法是使用类似SQLAlchemy的库为您生成SQL.参见SQL Expression Language tutorial.
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!