我正在尝试在 python 中使用 sqlite3 进行查询,按参数列“overall_risk”或“latest_risk”(这是双数)排序
param = ('overall_risk',)
cur = db.execute("SELECT * FROM users ORDER BY ? DESC", param)
Run Code Online (Sandbox Code Playgroud)
但是,当我编写如下查询时,我不会返回按"overall_risk"(或"latest_risk")排序的数据:
"SELECT * FROM users ORDER BY " + 'overall_risk' + " DESC"
Run Code Online (Sandbox Code Playgroud)
它确实有效。
SQL 参数不能用于除values之外的任何内容。使用占位符的全部意义在于正确引用值以避免将其解释为 SQL 语句的一部分或对象。
您正在尝试插入一个对象名称,而不是一个值,因此您不能使用?它。您必须使用字符串格式,并且对允许使用的名称非常小心:
cur = db.execute("SELECT * FROM users ORDER BY {} DESC".format(column_name))
Run Code Online (Sandbox Code Playgroud)
如果column_name取自用户输入,则需要根据现有列名对其进行验证。
另一种方法是使用SQLAlchemy 之类的库为您生成 SQL。请参阅SQL 表达式语言教程。
| 归档时间: |
|
| 查看次数: |
963 次 |
| 最近记录: |