У меня есть две переменные, которые нужно вставить в мою таблицу.
и у меня есть эти данные для нескольких пользователей:
user_ids = (-,-,-,-,-,-,-) **TUPLE**
marks = (-,-,-,-,-,-,-,-) **TUPLE**
Я хочу вставить эти данные в свою таблицу, используя executeemany, и я выполняю этот запрос в своем флеш-фрагменте:
con = pymysql.connect(
host=host,
user=user,
password=password,
db=db,
charset=charset,
cursorclass=pymysql.cursors.DictCursor,
port=port,
)
cur = con.cursor()
percs = calcattnonull()
# percs contains list of dictionaries.
# {[<'user_id'>: <'marks'>], [<'user_id'>: <'marks'>]........}
id_ = []
perc_ = []
final = []
for perc in tqdm(percs):
id_.append(perc["user_id"])
perc_.append(perc["att_perc"])
id_ = tuple(id_)
perc_ = tuple(perc_)
final.append(id_)
final.append(perc_)
cur.executemany(
"UPDATE dream_offline_calculate SET (user_id,att_percentage) VALUES (?,?)",
final,
)
con.commit()
Я получаю эту ошибку снова и снова: TypeError: не все аргументы, преобразованные во время форматирования строки
Заранее спасибо за помощь.
executemany
принимает итерабельность тех же заполнителей, которые вы использовали бы при вызове execute
несколько раз.
Поэтому, если ваш первоначальный запрос будет
cur.execute(
"UPDATE dream_offline_calculate SET (user_id,att_percentage) VALUES (?,?)",
(user_id, att_perc),
)
эквивалент executemany
бы
cur.executemany(
"UPDATE dream_offline_calculate SET (user_id,att_percentage) VALUES (?,?)",
[(user_id, att_perc)],
)
Так что просто сказано
cur.executemany(
"UPDATE dream_offline_calculate SET (user_id,att_percentage) VALUES (?,?)",
[(perc["user_id"], perc["att_perc"]) for perc in percs],
)
должен сделать трюк.