无法使用executemany一次插入多个列

时间:2018-08-06 07:04:19

标签: python mysql sql

我要在表中插入两个变量。

  • user_id-int
  • 标记-浮动

我正在为多个用户提供此数据:

user_ids = (-,-,-,-,-,-,-)  **TUPLE**
marks = (-,-,-,-,-,-,-,-)    **TUPLE**

我想使用executemany将此数据插入到我的表中,并且正在我的烧瓶代码片段中执行以下查询:

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 :(得分: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],
)

应该可以解决问题。