影院票务系统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
相关产品推荐
相关产品推荐

