【问题标题】:Not able to insert multiple columns in once using executemany无法使用 executemany 一次插入多列
【发布时间】:2019-01-13 02:13:43
【问题描述】:

我有两个变量要插入到我的表中。

  • user_id - int
  • 标记 - 浮动

我拥有这样的多个用户的数据:

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

我想使用 executemany 将此数据插入我的表中,并且我正在我的烧瓶 sn-p 中执行此查询:

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:字符串格式化期间并非所有参数都转换了

提前感谢您帮助我。

【问题讨论】:

    标签: python mysql sql


    【解决方案1】:

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

    应该可以解决问题。

    【讨论】:

    • 仍然出现 TypeError:字符串格式化错误期间并非所有参数都被转换
    猜你喜欢
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 2016-08-13
    • 2014-04-09
    • 2016-12-14
    • 2016-01-06
    • 2013-09-10
    • 2020-02-29
    相关资源
    最近更新 更多