【问题标题】:Syntax Error in raw MySQL query in DjangoDjango中原始MySQL查询中的语法错误
【发布时间】:2013-02-14 10:05:54
【问题描述】:

我在 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 获取限制值,但是当我在选择中提到它时查询如上所示。它会抛出错误

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

但是如果我在文件中提到限制值limit_value=5 并在选择查询中使用它,就像我在上面显示的那样,它将起作用。

所以这意味着如果我在 URL 中提到它并将其捕获到文件中,则选择查询中的限制将不起作用。为什么?还是我缺少什么?

我的查询:

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

【问题讨论】:

  • 您的查询格式似乎有误,您要执行什么查询
  • 好的,我编辑了我的问题,但是如果我提到文件中的限制不在 url 中,那么相同的查询将起作用
  • 我已经编辑了我的问题,请看一下
  • WHERE B.attribute_id 在这里查看.... WHERE B.attribute_id =<some_value>
  • 参数化查询应该是不可变的。你想要cur.execute("sql %s", (param,))

标签: python mysql django


【解决方案1】:

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

试试这个:

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

【讨论】:

  • 是的,这就是问题所在,现在工作正常,谢谢@Martijin
猜你喜欢
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多