Django自定义SQL查询不使用params

时间:2015-04-23 21:48:01

标签: python django sqlite django-models

我正在使用 SQLite

这是我的查询。我想检索三列并按其中一个列名排序。

query = "SELECT user_name, %s, %s FROM highscores_skills ORDER BY %s DESC"
cursor.execute(query, [skill, skill_exp, skill_exp])

我从GET请求中获得skillskill_exp基本上是'_exp'附加到技能。

不幸的是,这不起作用。 我得到了列名作为结果。 像这样, 约翰,攻击,attack_exp Doe,attack,attack_exp

其中,攻击的值为skill,而attack_exp的值为skill_exp

如果我不使用params但它很容易出现SQL注入,那么它可以工作。

我不确定是什么问题。我也尝试使用?代替%s作为占位符,就像在Python SQLite中一样,但没有。

1 个答案:

答案 0 :(得分:0)

您不能在sql引擎中使用占位符作为列名

一个。

insert into authorized_users values (sha1('".$name."'), sha1('".$password."'));

由于sqlinjection而不安全

query = "SELECT user_name, %s, %s FROM highscores_skills ORDER BY %s DESC"%(skill, skill_exp, skill_exp)
cursor.execute(query)

更安全,因为只允许预定义的查询