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

SQLite3 executemany绑定数量异常求助:绑定数与实际不符

解决SQLite绑定参数数量不匹配问题

问题根源

你误用了executemany方法:

  • executemany的第二个参数要求是包含多行数据的可迭代对象,每行数据是对应字段数量的元组/列表。
  • 你直接传入了单个行数据的列表values,sqlite3会将列表中的每个字符串视为独立的行参数序列,把字符串拆分成单个字符作为参数(比如第一个字符串长度为28,就会被解析成28个参数),导致参数数量与SQL语句的占位符不匹配。

解决方案

根据你的需求选择对应方法:

1. 插入单行数据:使用execute

如果只需要插入一行,直接替换executemany为execute即可,execute接受单个行数据序列作为参数:

cursor.execute("INSERT INTO test VALUES (?, ?, ?, ?, ?)", values)

2. 插入多行数据:正确构造executemany的参数

如果要插入多行,需要将每一行数据包装到外层列表中:

# 示例:插入两行数据
row1 = ['值1', '值2', '值3', '值4', '值5']
row2 = ['值6', '值7', '值8', '值9', '值10']
cursor.executemany("INSERT INTO test VALUES (?, ?, ?, ?, ?)", [row1, row2])

修改后的测试代码

import sqlite3
values = [' 19 850 000 Kč za nemovitost', ' včetně poplatků, včetně provize, včetně právního servisu', ' N6251', ' 29.09.2022', ' Cihlová']
def write(values):
    try:
        conn = sqlite3.connect(fr"C:\Users\halik\OneDrive\Dokumenty\GitHub\sws\code\test2.db")
        cursor = conn.cursor()
        print(sqlite3.version)
        cursor.execute('''CREATE TABLE IF NOT EXISTS test ("Celková cena:", "Poznámka k ceně:", "ID zakázky:", "Aktualizace:", "Stavba:")''')
    except Exception as e:  
        print(e)
        quit()
    print(f"values is {values}")
    print(f"len(values) is {len(values)}")
    print(f"len((values,)) is {len((values,))}")
    # 替换为execute插入单行
    cursor.execute("INSERT INTO test VALUES (?, ?, ?, ?, ?)", values)
    conn.commit()
    conn.close()

write(values)

内容的提问来源于stack exchange,提问作者Honza Halík

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:20:23