2015-08-19 4 views
2

Призвание:Ошибка синтаксиса SQL в абсурдно простых sql?

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 

Я попытался с именованными Params, ? и %s, и получить

  • Не все аргументы используются
  • неверное число аргументов для именованного параметра
  • SQL синтаксиса

Что происходит ?? Что мне не хватает ???

+0

При использовании '% (group_name)' должны не замены должны быть в словаре, а не в списке? – Barmar

+0

'dict (zip (group_columns, group))' превращает их в dict (с именами правильных клавиш). Еще кое-что еще проблема, потому что я не могу делать список + '% s' или'? 'Формат. –

+0

Можете ли вы вставить свой скрипт python, чтобы мы могли смотреть на отступы и т. Д.? – FirebladeDan

ответ

2

Это похоже на небольшую опечатку. Вы забыли добавить s к Params

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

Соответствующий код здесь:

+0

Эти вставки, вроде, но я получаю строки, которые выглядят так: http://cl.ly/image/0l1l2d3V181o - Где это документировано? Я запутался между документами для Mysql, Mysql-python и mysqldb, которые все делают по-другому. –

+1

Ваша 'def row_to_group_values ​​(строка)' возвращает строку, а не список. Когда вы 'zip' его с' group_columns', вы получаете то, что видите. – twil

+0

Я большой манекен. Спасибо, парни. –