Django中原始MySQL查询中的语法错误

时间:2013-02-14 10:05:54

标签: python mysql django

我在django中使用带有限制的原始mysql查询(限制是动态的,并在Url中提及),例如。

cursor.execute("some select query limit %s " , [limit_value] )

此限制值来自URL www.asd.com/qwe/?limit=5,我将此值记为limit_value=request.GET.get('limit'),当我打印此限制值时,它将打印5表示我可以从URL获取限制值但是当我如上所示,在select查询中提到了它。它会抛出错误

  

(1064,“您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以便在第1行的''5'附近使用正确的语法”)

但是,如果我在文件中提到限制值为limit_value=5并在选择查询中使用它,如上所示它将起作用。

所以这意味着如果我在URL中提到它并将其捕获到文件中,那么select查询中的限制将不起作用。为什么?或者有什么我想念的?

我的查询:

SELECT DISTINCT 
    A.entity_id AS entity_id, 
    A.email AS email,
    A.catquizid AS style_quiz_score,
    A.catquizquesans AS style_quiz_answer,
    A.created_at AS date_joined,
    A.is_active AS is_active,
    B.attribute_id AS attribute_id,
    B.value AS info
FROM customer_entity AS A
inner join  customer_entity_varchar AS B on A.entity_id=B.entity_id 
WHERE B.attribute_id
limit %s

1 个答案:

答案 0 :(得分:4)

您的limit_value是一个字符串,而不是一个整数,因此作为SQL参数,它会被赋予引号。

试试这个:

cursor.execute("some select query limit %s", (int(limit_value),))