Python向SQLite3的entities表插入数据时报参数不支持类型错误
错误原因
- 你的
entities表中type字段被定义为TEXT文本类型,仅支持存储字符串格式的数据 - 你插入时传入的
v是Python列表类型,SQLite3没有内置的列表对应存储类型,无法完成参数绑定,因此抛出InterfaceError异常
解决方案
根据你的业务使用场景,可选择以下两种方案:
场景1:将子列表整体作为单个字符串存储
如果你只需要把整个子列表的内容合并存储,后续读取后再拆分使用,可以先将列表拼接为分隔符分隔的字符串,再插入:
for v in type_list: # 用逗号拼接列表为字符串,也可以根据需求换成其他分隔符 type_str = ','.join(v) cur.execute('INSERT INTO entities (type) VALUES (?)', (type_str,)) # 插入完成后需要提交事务才能持久化到数据库 conn.commit()
场景2:后续需要单独查询单个类型值
如果后续有按单个type值过滤查询的需求,建议一行存储一个type值,修改插入逻辑如下:
for idx, type_items in enumerate(type_list): # 这里的idx+1替换为你实际对应的tweet_id值,避免外键约束报错 tweet_id = idx + 1 for item in type_items: cur.execute('INSERT INTO entities (tweet_id, type) VALUES (?, ?)', (tweet_id, item)) conn.commit()
注意:你的表定义中
tweet_id是关联tweets表的外键,如果tweets表中已经存在对应数据,需要替换上面的tweet_id为实际存在的关联ID,否则会触发外键约束异常。
内容的提问来源于stack exchange,提问作者Ms Y
相关产品推荐
相关产品推荐

