MySQL в скрипте python : Недостаточно параметров для оператора sql

#python #mysql

Вопрос:

Мне трудно найти, что не так со следующим запросом в моем скрипте python. Я получил следующее сообщение : «Недостаточно параметров для инструкции sql».

Запрос и фрагмент кода:

 sql_insert_with_param = """INSERT INTO events_fb (event_url, url, title, address_1, address_2, event_by, 
        start_time, end_time, ticket, going, interested, event_image_url, createdAt, image_path, description) VALUES (
        %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) ON DUPLICATE KEY UPDATE start_time=%s, end_time=%s, event_image_url=%s, description=%s, title=%s"""

data_tuple = (event_url, url, title, address_1, address_2, event_by, start_time, end_time, ticket, going, interested, event_image_url, time.strftime('%Y-%m-%d %H:%M:%S'), output_path, description)
cursor.execute(sql_insert_with_param, data_tuple)
 

Это связано с частью «НА ДУБЛИРУЮЩЕМ КЛЮЧЕ», но хорошо работает без этой части.

Первичный ключ : «url»

Спасибо

Комментарии:

1. У вас есть 20 %s в шаблоне запроса, но только 15 значений в вашем кортеже.

Ответ №1:

Вы забыли добавить параметры для

 ON DUPLICATE KEY UPDATE start_time=%s, end_time=%s, event_image_url=%s, description=%s, title=%s
 

Ответ №2:

Поскольку вы хотите обновить новые значения, в строке используйте ЗНАЧЕНИЯ

Или добавьте параметры для пейсхолдера

 sql_insert_with_param = """INSERT INTO events_fb (event_url, url, title, address_1, address_2, event_by, 
        start_time, end_time, ticket, going, interested, event_image_url, createdAt, image_path, description) VALUES (
        %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) ON DUPLICATE KEY UPDATE start_time=VALUES(start_time), end_time=VALUES(end_time), event_image_url=VALUES(event_image_url), description=(description), title=VALUES(title)"""

data_tuple = (event_url, url, title, address_1, address_2, event_by, start_time, end_time, ticket, going, interested, event_image_url, time.strftime('%Y-%m-%d %H:%M:%S'), output_path, description)
cursor.execute(sql_insert_with_param, data_tuple)