2012-04-16 2 views
4

Я хотел использовать executemany в моей программе для хранения 20 записей сразу, Вот что говорится в документации ...MySQLdb executemany использует список в качестве входных данных?

c.executemany(
    """INSERT INTO breakfast (name, spam, eggs, sausage, price) 
    VALUES (%s, %s, %s, %s, %s)""", 
    [ 
    ("Spam and Sausage Lover's Plate", 5, 1, 8, 7.95), 
    ("Not So Much Spam Plate", 3, 2, 0, 3.95), 
    ("Don't Wany ANY SPAM! Plate", 0, 4, 3, 5.95) 
    ]) 

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

Вот мой код ниже ...

db = connect_to_db() 
cursor = db.cursor() 
sql = "INSERT INTO gkey (keyword, date, time, position) VALUES (%s, %s, %s, %s)" 
params = [(str(keywords[0]), date, time, position[0])] 
cursor.executemany(sql, params) 
db.commit() 

Это прекрасно работает, и он совершит первое ключевое слово в списке, наряду с указанием даты, времени и положения, я не хочу иметь повторите Params 19 раз, как показано ниже ...

db = connect_to_db() 
cursor = db.cursor() 
sql = "INSERT INTO gkey (keyword, date, time, position) VALUES (%s, %s, %s, %s)" 
params = [ 
(str(keywords[0]), date, time, position[0]) 
(str(keywords[0]), date, time, position[0]) 
(str(keywords[0]), date, time, position[0]) 
(str(keywords[0]), date, time, position[0]) 
(str(keywords[0]), date, time, position[0]) 
(str(keywords[0]), date, time, position[0]) 
(str(keywords[0]), date, time, position[0]) 
(str(keywords[0]), date, time, position[0]) 
(str(keywords[0]), date, time, position[0]) 
(str(keywords[0]), date, time, position[0]) 
(str(keywords[0]), date, time, position[0]) 
(str(keywords[0]), date, time, position[0]) 
(str(keywords[0]), date, time, position[0]) 
(str(keywords[0]), date, time, position[0]) 
(str(keywords[0]), date, time, position[0]) 
(str(keywords[0]), date, time, position[0]) 
(str(keywords[0]), date, time, position[0])  
(str(keywords[0]), date, time, position[0]) 
(str(keywords[0]), date, time, position[0]) 

] 
cursor.executemany(sql, params) 
db.commit() 

Выше пример того, что я пытаюсь избежать (индекс должен быть увеличен для того, чтобы работать, я знаю;))

я эрро r, когда я пытаюсь передать весь список в качестве значения, и мне нужно передать их по одному, какие-нибудь идеи? Могут ли многие сделать это, или я должен делать цикл и обновлять их по одному за раз? Но я уверен, что я попробовал это, и у меня такая же ошибка? Однако я не заметил этого.

ответ

10
params = [(str(keywords[i]), date, time, position[i]) for i in range(20)] 
+0

Большое вам спасибо! Таким образом, вы можете использовать цикл при определении переменной? Я предполагаю, что это будет иметь другие приложения при передаче параметров для функций и т. Д.? – jjjjj

+1

Это понимание списка http://www.diveintopython.net/native_data_types/mapping_lists.html – vartec

+0

Спасибо за ссылку – jjjjj

Смежные вопросы