Невозможно вставить несколько столбцов за один раз, используя executemany

0

У меня есть две переменные, которые нужно вставить в мою таблицу.

  • user_id - int
  • знаки - плавать

и у меня есть эти данные для нескольких пользователей:

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: не все аргументы, преобразованные во время форматирования строки

Заранее спасибо за помощь.

Теги:

1 ответ

0

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],
)

должен сделать трюк.

  • 0
    По-прежнему получаю TypeError: не все аргументы преобразованы во время ошибки форматирования строки

Ещё вопросы

Сообщество Overcoder
Наверх
Меню