如何调试“您的 SQL 语法有错误”

Posted

技术标签:

【中文标题】如何调试“您的 SQL 语法有错误”【英文标题】:How to debug 'You have an error in your SQL syntax' 【发布时间】:2019-05-22 16:54:56 【问题描述】:

You have an error in your SQL syntax 上有几个问题 - 但它们似乎都解决了查询中的特定语法错误,这通常对其他人没有帮助。

我的问题是如何从 Python 中的 mysql 命令获取格式化查询,以便实际检查它?

所以我有这样的声明:

cursor.execute("INSERT INTO products(acc, title, sku, price, price_checked, desc, imgs) VALUES (%s,%s,%s,%s,%s,%s,%s)", (1, prod.title, prod.sku, prod.price, datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), prod.desc, prod.imgs))

错误是:

_mysql_exceptions.ProgrammingError: (1064, "您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册以获取正确的语法以使用 n ear 'desc, imgs) VALUES (1,'Holy Stone HS700 FPV Drone with 1080p HD Camera Live Vide' at line 1")

知道如何获得执行的查询吗?我不想自己格式化查询然后在执行之前打印它,而是主要出于安全原因使用 MySQL 的内置格式化。

【问题讨论】:

不确定您的问题。但是如果你想格式化查询试试dpriver.com/pp/sqlformat.htm,如果你想调试查询为什么不直接在mysql上测试呢? 这不是引发错误的查询吗?它在谈论desc,所以大概是一个 SELECT 查询。这是一个 INSERT,不包括 DESC @roganjosh 是的,它确实包括 desc。这是倒数第二个论点。你看到了吗? 首先尝试用引号将文本数据括起来。 @AndreiOdegov 日期时间也是? 【参考方案1】:

DESC是SQL中的关键字,用于降序排序。您不能调用您的参数之一"desc",因为它将被解释为这样。考虑一下您是否将其中一列称为“选择”;这是同一个问题。您需要重命名该字段。

最初我专注于prod.desc,但在您的查询字符串中,您将'desc'列为实际列名:"... products(acc, title, sku, price, price_checked, desc, imgs)"

您可以使用建议 here 看到最后一个查询运行,但我无法测试,因为我没有任何 MySQL 实例。

【讨论】:

prod 是一个具有desc 属性的对象。即作为参数传递给%s @JuanCarlosOropeza 不,忘记传递的 python 对象(我也第一次看到),它们实际上有一个名为“desc”的列; ...INTO products(acc, title, sku, price, price_checked, desc, imgs) 谢谢 - 这工作。你可以添加一个方法来查看执行的查询吗? @User 已编辑但无法测试。无论如何,它与您的问题无关,因为您没有发现您正在使用关键字并且它没有在错误中将其标记为这样(无论如何都是明确的)。

以上是关于如何调试“您的 SQL 语法有错误”的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误 - LARAVEL

我的 SQL 错误:错误 1064:您的 SQL 语法有错误;

SQL 语法错误:您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册

我如何解决以下sql语法错误

Laravel 5.8 SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误

MySQL #1064 - 您的 SQL 语法 2020 有错误 [重复]