当前位置:首页 > 数据库 > SQlite

python-SQLite3查询带有ORDER BY参数的参数?符号

我正在尝试使用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)!