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

0 投票
1 回答
943 浏览
提问于 2025-04-17 15:52

我在Django中使用原始的MySQL查询,并且想要设置一个动态的限制(这个限制值是从网址中获取的)。比如说:

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

这个限制值是从网址 www.asd.com/qwe/?limit=5 中获取的,我通过 limit_value=request.GET.get('limit') 来获取这个值。当我打印这个限制值时,它会显示为5,这意味着我可以从网址中获取到限制值。但是当我在上面的选择查询中使用这个限制值时,就会出现错误。

(1064, "你的SQL语法有错误;请检查与你的MySQL服务器版本相对应的手册,以获取正确的语法,错误出现在第1行的''5''附近")

但是如果我在文件中直接写 limit_value=5,并在选择查询中使用它,就可以正常工作。

所以这意味着,如果我在网址中提到限制值并在文件中获取它,那么在选择查询中就无法使用。为什么会这样呢?或者我是不是漏掉了什么?

我的查询是:

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 个回答

4

你的 limit_value 是一个字符串,而不是整数,所以在 SQL 参数中它会被加上引号。

试试这个:

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

撰写回答