Python SQLite代码报错ValueError: parameters are of unsupported type求助
解决
ValueError: parameters are of unsupported type 错误 我来帮你搞定这个报错问题!咱们先揪出问题的根源:你的executemany调用参数格式完全不符合sqlite3的要求。
sqlite3的executemany方法需要的参数是一个可迭代对象,其中每个元素对应SQL语句里的占位符元组。你现在把两个独立的生成器data和inputy打包成元组传进去,sqlite3根本不知道该怎么处理这种嵌套的生成器结构,自然就抛出了不支持类型的错误。
修复思路和步骤
- 配对数据生成器:我们需要把学号和对应的姓名一一配对,形成每个行的二元组(比如
(1, "Alice")这种格式)。可以用zip把两个生成器的元素对应起来,再把配对后的子元组合并成完整的行参数。 - 调整连接关闭时机:你现在在
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
相关产品推荐
相关产品推荐

