You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行INSERT语句遇TypeError:字符串格式化参数未全部转换求助

问题解决:TypeError: not all arguments converted during string formatting

你的错误根源是同时混用了两种SQL参数传递方式,导致参数不匹配:

错误原因

你在cur.execute里先通过%r把row直接格式化进SQL语句,又把row作为第二个参数传给execute。execute会尝试用这个参数去替换SQL里的占位符,但此时SQL语句里已经没有占位符了,自然会报参数转换不全的错误。

正确写法(二选一)

写法1:使用参数绑定(推荐,防SQL注入)

不要自己手动格式化SQL,用数据库驱动自带的参数占位符,根据row的长度生成对应数量的%s占位符:

for row in csv_data:
    if skipHeader:
        skipHeader = False
        continue
    row = tuple(row)
    # 根据row元素数量生成对应占位符
    placeholders = ", ".join(["%s"] * len(row))
    cur.execute(f"INSERT INTO july VALUES ({placeholders})", row)

写法2:仅用字符串格式化(不推荐,有SQL注入风险)

如果非要手动格式化,就不要传第二个参数,直接把格式化后的完整SQL传给execute:

for row in csv_data:
    if skipHeader:
        skipHeader = False
        continue
    row = tuple(row)
    cur.execute("INSERT INTO july VALUES %r" % row)

内容的提问来源于stack exchange,提问作者coding_upcomer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 02:22:33