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

影院票务系统SQLite插入报错求助:类型不匹配问题排查

问题分析

你遇到的类型不匹配错误,根源在于表结构定义和插入数据的类型不兼容:

  • 创建Tickets表时,ticket_id被声明为INTEGER PRIMARY KEY类型
  • 但你插入的Tickets_data里,ticket_id是'T1'、'T2'这类字符串值,和定义的整数类型冲突,导致插入失败
两种解决方法

方法一:修改表结构,适配字符串类型的ticket_id

把ticket_id的类型从INTEGER改为TEXT,这样就能兼容带字母的ID:

def create_table():
    conn = sqlite3.connect('Reservation.db')
    cursor = conn.cursor()

    cursor.execute('''
        CREATE TABLE IF NOT EXISTS Tickets (
            ticket_id TEXT PRIMARY KEY,  -- 此处修改为TEXT类型
            movie_name TEXT,
            ticket_quantity INTEGER,
            ticket_price INTEGER
        )''')

    conn.commit()
    conn.close()

修改后需删除原有的Reservation.db文件,重新运行代码创建新表。

方法二:修改插入数据,使用整数类型的ticket_id

如果想保留ticket_id的整数类型,把插入数据里的ID改成纯数字:

def insert_Tickets():
    conn = sqlite3.connect('Reservation.db')
    cursor = conn.cursor()

    Tickets_data = [
        (1, 'Movie1', 3, 50),   -- 替换为纯数字ID
        (2, 'Movie2', 2, 40),
        (3, 'Movie3', 4, 60),
        (4, 'Movie4', 5, 60),
        (5, 'Movie5', 1, 65)
    ]

    cursor.executemany('INSERT OR REPLACE INTO Tickets (ticket_id, movie_name, ticket_quantity, ticket_price) VALUES (?, ?, ?, ?)', Tickets_data)

    conn.commit()
    conn.close()

同样需要删除旧数据库文件,重新运行初始化代码。

额外提示

后续通过ticket_id查询或更新数据时,要保证传入参数的类型和表定义一致:

  • 若用TEXT类型ID,更新时传入字符串(比如update_quantity('T1', 1))
  • 若用INTEGER类型ID,更新时传入整数(比如update_quantity(1, 1))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:34:53