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

Python用sqlite3将CSV转数据库时遇TypeError与ValueError求助

Python sqlite3 导入CSV到数据库的错误修复

错误原因分析

  1. TypeError: executemany()仅接受2个参数
    executemany()的正确用法是cursor.executemany(sql语句, 参数序列),你传入了3个参数(语句、show_id、genre),不符合函数签名。而且单条genre插入用execute()更合适,也可以批量收集所有genre后再用executemany()提升效率。

  2. ValueError: 参数类型不支持
    db.execute(stmnt1, (title,))返回的是游标对象,并非插入记录的ID。要获取刚插入的show_id,需使用cursor.lastrowid属性。

  3. 额外隐性问题:

    • SQLite中自增字段的正确写法是INTEGER PRIMARY KEY AUTOINCREMENT(AUTOINCREMENT无空格),原代码的AUTO INCREMENT会触发语法错误。
    • open("favorites8.db", "w")会直接清空数据库文件,导致之前创建的表丢失,这行代码完全多余,必须删除。

修正后的完整代码

import sqlite3
import csv

# 创建数据库连接
conn = sqlite3.connect("favorites8.db")
db = conn.cursor()

# 创建表(修正自增字段语法,添加IF NOT EXISTS避免重复创建报错)
db.execute("CREATE TABLE IF NOT EXISTS shows (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL)")
db.execute("CREATE TABLE IF NOT EXISTS genres (shows_id INTEGER, genre TEXT NOT NULL, FOREIGN KEY (shows_id) REFERENCES shows(id))")

# 读取CSV文件并插入数据
with open("favorites.csv", "r") as file:
    reader = csv.DictReader(file)
    for row in reader:
        # 标准化标题格式
        title = row["title"].strip().upper()
        # 插入shows表并获取ID
        stmnt1 = "INSERT INTO shows (title) VALUES(?)"
        db.execute(stmnt1, (title,))
        show_id = db.lastrowid  # 获取刚插入的记录ID
        
        # 方式1:单条插入genre
        for genre in row["genres"].split(", "):
            stmnt2 = "INSERT INTO genres (shows_id, genre) VALUES(?, ?)"
            db.execute(stmnt2, (show_id, genre))
        
        # 方式2:批量插入genre(大文件推荐用,效率更高)
        # stmnt2 = "INSERT INTO genres (shows_id, genre) VALUES(?, ?)"
        # genre_params = [(show_id, genre) for genre in row["genres"].split(", ")]
        # db.executemany(stmnt2, genre_params)

# 提交更改并关闭连接
conn.commit()
conn.close()

关键修正点说明

  • 替换错误的show_id获取方式,改用lastrowid拿到插入记录的主键ID。
  • 调整executemany()的使用方式,要么单条用execute(),要么批量构造参数序列后调用。
  • 修正SQLite自增字段的语法错误,添加IF NOT EXISTS避免重复创建表报错。
  • 删除清空数据库的open()语句,保留sqlite3连接自动创建文件的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:48:17