【发布时间】:2015-04-23 21:48:00
【问题描述】:
我正在使用 SQLite
这是我的查询。我想检索三列并按其中一列名称排序。
query = "SELECT user_name, %s, %s FROM highscores_skills ORDER BY %s DESC"
cursor.execute(query, [skill, skill_exp, skill_exp])
我从 GET 请求中得到 skill,而 skill_exp 基本上是 '_exp' 附加到技能。
很遗憾,这不起作用。 结果我得到了列名。 像这样, 约翰,攻击,attack_exp Doe,攻击,attack_exp
其中attack 是skill 的值,attack_exp 是skill_exp 的值
如果我不使用参数,它可以工作,但很容易发生 SQL 注入。
我不确定出了什么问题。我也尝试过使用 ? 而不是 %s 作为占位符,就像它在 Python SQLite 中一样,但没有。
【问题讨论】:
-
您不能将占位符用作列名(仅用作比较值),因此从用户输入中获取它可能不是一个好主意...这就是说您始终可以进行正常的 python 字符串格式化...此外,为什么你不是只使用 django ORM 吗?
-
@JoranBeasley 啊,真可惜。我并没有完全将其作为用户输入。我正在使用查询字符串来传递信息。我猜我会在 urls.py 中检索值。谢谢。
-
@JoranBeasley 我可以使用 python 字符串格式化但 SQL 注入。而且我不想使用 django ORM,因为我希望结果在列表中,而不是在模型中。
-
所以将模型转换为元组列表...开销几乎为零...而且这样做更好...
标签: python django sqlite django-models