2015-10-07 16 views
-1

我试图做一个选择Django的查询语法(必须是字符串或只读缓冲器,而不是数组)

query = "select * from snmptt order by id desc limit %s", limit 
cursorMYSQL.execute(query) 

我从形式

limit = form_limit.cleaned_data['limit'] 

我已经使用得到限制这个语法(而不是%)为插入和它的工作,所以我不明白为什么现在不工作。

谢谢!

+5

但首先让我问你一个问题,当你使用Django时,为什么要创建一个游标并手动执行这样一个简单的查询? – e4c5

+2

如果将其更改为'“select * from snmptt order by id desc limit%s”%limit',会发生什么? – cezar

+1

@cezar使用'“...”%limit'是个不错的主意。它可能工作,但它不安全,并使您容易受到SQL注入的影响。 – Alasdair

回答

4

查询和参数应该是执行方法的独立参数。

query = "select * from snmptt order by id desc limit %s" 
params = [limit] 
cursorMYSQL.execute(query, params) 
+0

@cezar如果你愿意,你可以在一行中完成整个事情,但我认为更长的版本更清晰,特别是作为堆栈溢出的答案。 – Alasdair

+0

我不小心删除了我以前的评论,而不是仅仅编辑它。是的,更长的版本更加详细和更全面。只是一句话,对于'params'是一个元组,它不会更好吗?在文档中,我看到了准备好的语句中的元组。 – cezar

+0

我不认为它实际上是否使用列表或元组有任何区别。在这种情况下,只有一个参数,我使用'[limit]',因为它更清楚'(limit,)'。 – Alasdair

相关问题