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

Python SQLite代码报错ValueError: parameters are of unsupported type求助

解决 ValueError: parameters are of unsupported type 错误

我来帮你搞定这个报错问题!咱们先揪出问题的根源:你的executemany调用参数格式完全不符合sqlite3的要求。

sqlite3的executemany方法需要的参数是一个可迭代对象,其中每个元素对应SQL语句里的占位符元组。你现在把两个独立的生成器data和inputy打包成元组传进去,sqlite3根本不知道该怎么处理这种嵌套的生成器结构,自然就抛出了不支持类型的错误。

修复思路和步骤

  1. 配对数据生成器:我们需要把学号和对应的姓名一一配对,形成每个行的二元组(比如(1, "Alice")这种格式)。可以用zip把两个生成器的元素对应起来,再把配对后的子元组合并成完整的行参数。
  2. 调整连接关闭时机:你现在在data_entry函数定义里就直接关闭了游标和连接,这会导致调用函数时连接已经失效,根本没法执行数据库操作。最好用上下文管理器(with语句)自动管理连接,或者把关闭代码放到所有操作完成之后。

修正后的完整代码

import sqlite3

def Table_making(cursor):
    cursor.execute("CREATE TABLE IF NOT EXISTS Tester(Roll_numbers TEXT, Names TEXT)")

def data_entry(cursor, connector):
    # 生成学号迭代器,转成字符串匹配表的TEXT类型
    roll_numbers = (str(i) for i in range(1, 11))
    # 生成带提示的姓名输入迭代器,提升用户体验
    names = (input(f"请输入学号{x}的姓名: ") for x in range(1, 11))
    # 配对学号和姓名,形成符合要求的二元组迭代器
    combined_data = ((roll, name) for roll, name in zip(roll_numbers, names))
    # 传入正确格式的参数执行批量插入
    cursor.executemany("INSERT INTO Tester (Roll_numbers, Names) VALUES (?, ?)", combined_data)
    connector.commit()

# 用上下文管理器自动管理连接,避免手动关闭的疏漏
with sqlite3.connect("Database_tester.db") as connector:
    cursor = connector.cursor()
    Table_making(cursor)
    data_entry(cursor, connector)

额外小提示

  • 我把学号转换成了字符串,因为你的表定义里Roll_numbers是TEXT类型,这样数据类型更匹配。
  • with语句是数据库操作的最佳实践,它会在代码块结束后自动提交(无异常时)并关闭连接,彻底避免资源泄漏问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:34:12