【问题标题】:Getting MySQL Error获取 MySQL 错误
【发布时间】:2011-11-11 16:45:11
【问题描述】:

尝试通过 Python 运行 MySQL 脚本,但它不断给我错误。这是我的 MySQL:

c.execute("""INSERT into DATA(checkup_date)
VALUES(%s) WHERE machine_name = %s
""", (date, machine))

我做错了什么?

ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE machine_name = 'TL-D04'\nVALUES('2011-11-11')' at line 2")

【问题讨论】:

  • @JimGarrison:%s 语法是 MySQLdb 中参数化 SQL 的工作方式。特别要注意%s 周围没有引号。请在 Google 上搜索 MySQLdb 文档,然后丢弃您的评论。
  • 检查 _mysql 的源代码让我相信 C API 不使用准备好的语句,因此容易受到 SQL 注入的攻击。您似乎无法使用 Python MySQLDB API 来避免它。叹息……

标签: python mysql


【解决方案1】:

INSERT INTO ... VALUES ... WHERE ... 不是有效的 SQL。您不能将WHERE 子句添加到INSERT 语句中。

我猜您想更新DATA 表中当前行的checkup_date 列,而不是插入新行。如果是这种情况,请尝试

UPDATE DATA SET checkup_date = %s WHERE machine_name = %s

改为。

【讨论】:

  • 这看起来应该可以工作,但现在它告诉我 inventory.data 不存在。我有一个名为 inventory 的数据库和一个名为 data 的表 - 它应该可以工作!
  • ProgrammingError: (1146, "表 'inventory.DATA' 不存在")
【解决方案2】:

这个帖子应该可以帮到你。

cursor.execute("INSERT INTO im_entry.test ("+entrym+") VALUES ('"+p+"');")

看来你的引号太多了

【讨论】:

  • """ 是 Python 的一种表示所有内容(包括换行符等)都是字符串值的方式。
  • 谢谢。这就提出了一个新问题:我为什么要包含换行符或执行简单 SQL 语句的内容。我调用的线程显示不需要使用占位符
猜你喜欢
  • 2011-10-10
  • 1970-01-01
  • 2012-10-04
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-16
相关资源
最近更新 更多