2012-05-10 2 views
1

У меня есть список списков: myList = [[123, 345], [23, 45], [54, 34]]Как использовать MySQL executemany для обновления списка списков в Python?

Я хочу сделать что-то вроде этого:

cursor.executemany("update tablename set flag = 'yes' where id = %s and officeid = %s", myList) 

я искал для этого и не нашел решения. Если он никогда не будет реализован, что такое лучший оператор обновления без необходимости перебирать все элементы в списке?

ответ

1
myTuples = tuple(map(tuple, myList)) 

cursor.execute("update tablename set flag = 'yes' \ 
where (id, officeid) in " + str(myTuples)) 
+0

Он говорит: TypeError: executemany() принимает ровно 3 аргумента (2 заданных), но execute() работает просто отлично! – ThinkCode

+0

Спасибо - изменил решение выше. :) –

+0

Как мы можем изменить это, если флаг является значением в кортеже вместо константы «да»? Можем ли мы: cursor.execute ("update tablename установить флаг =% s \ где (id, officeid) в" + str (myTuples)), где myTuple может быть ('nope', 21, 32). Любые указатели здесь ? Благодаря! – ThinkCode

1
update tablename set flag = 'yes' 
WHERE (id,officeid) IN ((123,345), (23,45), (54,34)); 
+0

Могу ли я узнать эквивалент Python для списка списков? – ThinkCode

+0

@ThinkCode: Извините, я не знаком с Python. Запрос работает в Mysql, но я не знаю, как передать такие параметры в Python. – a1ex07

+1

Эквивалент Python для списка списков - это список списков. Например. 'myList' в вопросе представляет собой список списков. Если вы сделали его в кортеж кортежей, это будет '((123,345), (23,45), (54,34))' и его взаимозависимость с «% s» будет работать так, как ожидает интерпретатор MySQL, хотя это выглядит как место для SQL-инъекции, если элементы поступают с пользовательского ввода. – 9000