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

sqlite3关联机票数量与飞机容量属性出现NameError报错如何解决

SQLite机票库存校验问题修复方案

报错根因

你遇到的NameError: name 'airline' is not defined报错,是因为你错误使用了不存在的airline模块操作数据库,Python中操作SQLite数据库需要通过sqlite3模块提供的连接、游标对象执行SQL语句完成,没有airline.db()这种直接调用语法。
除此之外你的代码还存在建表语法错误、逻辑不完整等问题,完整修复步骤如下:

修复步骤

1. 修正建表逻辑

  • 修正模块调用错误:导入的是sqlite3,连接数据库要调用sqlite3.connect()
  • 修正SQL语法错误:补全缺失的逗号、修正拼写错误(你代码里的ı是特殊字符,统一换成英文i避免编码问题)
  • 新增Plane表存储飞机容量数据,同时建议ticket表增加航班关联字段,才能对应到具体飞机的容量
  • 建表语句执行后要调用commit()提交事务才会生效

2. 修正业务校验逻辑

  • 新增机票前先执行SELECT语句查询对应航班的已售机票总量、对应飞机的容量
  • 对比两个数值后再决定是否允许新增机票

修正后的完整可运行代码

import sqlite3

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

# 1. 建表:先建Plane表存储飞机信息,再建Ticket表存储机票信息,关联plane_id字段
create_plane_sql = """
CREATE TABLE IF NOT EXISTS PLANE(
    plane_id INTEGER PRIMARY KEY AUTOINCREMENT,
    plane_name TEXT NOT NULL,
    plane_capacity INTEGER NOT NULL
)
"""
cursor.execute(create_plane_sql)

create_ticket_sql = """
CREATE TABLE IF NOT EXISTS TICKET(
    ticket_no INTEGER PRIMARY KEY AUTOINCREMENT,
    ticket_type TEXT NOT NULL,
    ticket_price INT NOT NULL,
    plane_id INT NOT NULL,
    FOREIGN KEY (plane_id) REFERENCES PLANE(plane_id)
)
"""
cursor.execute(create_ticket_sql)
conn.commit()

# 示例:先插入一条飞机测试数据,容量200
cursor.execute("INSERT INTO PLANE(plane_name, plane_capacity) VALUES (?, ?)", ("波音737", 200))
conn.commit()

# 业务逻辑:新增机票前的库存校验,这里示例给plane_id=1的航班新增机票
def add_ticket(ticket_type, ticket_price, plane_id):
    # 查询当前航班已售机票数
    cursor.execute("SELECT COUNT(*) FROM TICKET WHERE plane_id = ?", (plane_id,))
    sold_count = cursor.fetchone()[0]
    # 查询对应飞机的容量
    cursor.execute("SELECT plane_capacity FROM PLANE WHERE plane_id = ?", (plane_id,))
    capacity = cursor.fetchone()[0]
    
    if sold_count < capacity:
        # 库存足够,插入机票
        cursor.execute("INSERT INTO TICKET(ticket_type, ticket_price, plane_id) VALUES (?, ?, ?)",
                      (ticket_type, ticket_price, plane_id))
        conn.commit()
        print("Added Successfully")
    else:
        print("There aren't enough tickets for the flight.")

# 测试调用
add_ticket("经济舱", 800, 1)

# 关闭连接
conn.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 10:36:05