【问题标题】:SQL syntax error in absurdly simple sql? [closed]荒谬简单的 sql 中的 SQL 语法错误? [关闭]
【发布时间】:2015-11-13 06:29:45
【问题描述】:

调用:

INSERT IGNORE INTO standard_group (group_name, subject, grade, country, state) VALUES (%(group_name), %(subject), %(grade), %(country), %(state));

('Arizona Social Studies Standards', 'Social Studies', '1', 'United States', 'AZ')

例如:

    print group_columns
    print group_sql
    print group
    cur.execute(group_sql, dict(zip(group_columns, group)))

但我总是得到:

['group_name', 'subject', 'standard_category', 'standard_sub_category', 'standard_name', 'standard_description', 'grade', 'country', 'state', 'is_common_core', 'is_state_standard']
INSERT IGNORE INTO standard_group (group_name, subject, grade, country, state) VALUES (%(group_name), %(subject), %(grade), %(country), %(state));
('Arizona Social Studies Standards', 'Social Studies', '1', 'United States', 'AZ')
Traceback (most recent call last):
  File "standards-import/simport.py", line 167, in <module>
    cur.execute(group_sql, dict(zip(group_columns, group)))
  File "/Library/Python/2.7/site-packages/mysql/connector/cursor.py", line 507, in execute
    self._handle_result(self._connection.cmd_query(stmt))
  File "/Library/Python/2.7/site-packages/mysql/connector/connection.py", line 722, in cmd_query
    result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
  File "/Library/Python/2.7/site-packages/mysql/connector/connection.py", line 640, in _handle_result
    raise errors.get_exception(packet)
mysql.connector.errors.ProgrammingError: 1064 (42000): 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 '%(group_name), %(subject), %(grade), %(country), %(state))' at line 1

我已经尝试使用命名参数?%s,然后得到

  • 并非所有参数都使用
  • 命名参数的参数数量错误
  • SQL 语法

发生了什么事??我错过了什么???

【问题讨论】:

  • 当您使用%(group_name) 时,替换不应该在字典而不是列表中吗?
  • dict(zip(group_columns, group)) 将它们变成一个字典(具有正确的键名)。其他问题仍然存在,因为我也不能使用 list + %s? 格式。
  • 你能粘贴你的python脚本以便我们查看缩进等吗?

标签: python mysql prepared-statement named-parameters


【解决方案1】:

它看起来像一个小错字。您忘记在参数中添加s

INSERT IGNORE INTO standard_group (group_name, subject, grade, country, state) VALUES (%(group_name)s, %(subject)s, %(grade)s, %(country)s, %(state)s);

相关代码在这里:

【讨论】:

  • 这个插入,有点,但我得到的行看起来像:cl.ly/image/0l1l2d3V181o -- 这在哪里记录?我对 Mysql、Mysql-python 和 mysqldb 的文档感到困惑,它们的作用都不同。
  • 您的 def row_to_group_values(row) 返回字符串,而不是列表。当你 zipgroup_columns 时,你会得到你所看到的。
  • 我是个大傻瓜。谢谢大家。
猜你喜欢
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-05
  • 1970-01-01
  • 2015-01-04
  • 2014-12-02
  • 1970-01-01
相关资源
最近更新 更多