Python&Mysql. Как правильно соединить список что бы его можно было использовать в запросе?

id = ['13364', '13365'];
ids = ','.join(id);

cursor.execute("UPDATE articles SET sticky=0 WHERE id IN (%s)", ids);



Получаю предупреждение Warning: Truncated incorrect DOUBLE value: '13364,13365' после чего запрос работает только с первым числом из списка.
  • Вопрос задан
  • 3249 просмотров
Пригласить эксперта
Ответы на вопрос 8
Бообще-то Вы извращенцы!

id = ['13364', '13365']
cursor.execute(«UPDATE articles SET sticky=0 WHERE id IN (%s)» % (",".join(["%s"] * len(id)), id)

Не знаю делиметра для мускула, но в питоне точку с запятой не ставте!!!
Ответ написан
@nes
Попробуйте поставить пробел
ids = ', '.join(id);
Ответ написан
Комментировать
JetMaster
@JetMaster Автор вопроса
тоже самое только с пробелом Warning: Truncated incorrect DOUBLE value: '13364, 13365'
на всякий случай Python 2.6.5
Ответ написан
Комментировать
JetMaster
@JetMaster Автор вопроса
Причину я понял. Нашёл у cursor переменную _last_executed которая содержит последний «скомпилированный» запрос.

print cursor._last_executed;
UPDATE blurb_topics SET paid_service='', vip=0 WHERE id IN ('13364, 13365')


как избавится от кавычек не знаю
Ответ написан
Комментировать
alexmuz
@alexmuz
У вас же '13364', '13365' строки и логично, что если их объединить с помощью ',' получится строка '13364,13365'
ids = "','".join(id)
cursor.execute("UPDATE articles SET sticky=0 WHERE id IN ('%s')", ids);
Ответ написан
JetMaster
@JetMaster Автор вопроса
ids = "','".join(vip_id);
cursor.execute("UPDATE articles SET sticky=0 WHERE id IN ('%s')", ids);


_mysql_exceptions.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 '13364\\',\\'13365'')' at line 1»)

вся беда в кавычках
Ответ написан
Комментировать
JetMaster
@JetMaster Автор вопроса
ids = ','.join(vip_id);
cursor.execute('UPDATE articles SET sticky=0 WHERE id IN (%s)', ids);
print cursor._last_executed;


Warning: Truncated incorrect DOUBLE value: '13364,13365'
Ответ написан
Комментировать
JetMaster
@JetMaster Автор вопроса
Копание на stackoverflow.com навело на синтаксис

ids = ', '.join(vip_id);
cursor.execute('UPDATE articles SET sticky=0 WHERE id IN (%s)' % (ids));


Работает. Хотелось бы докопаться до истины как работает конструкция выше.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы