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

Python+MySQL医院预约系统报错:NAME未定义,求解决方法

问题解决:NameError 修正方案

错误原因

  • 触发NameError是因为代码中用到的NAME、PHONE_NO、EMAIL_ID、SPONSOR、INSURANCE_ID变量未被定义,当前仅查询了patient表的PMR_NO字段,没有获取患者的其他关联信息。
  • 同时INSERT语句语法错误,子查询的写法不符合MySQL插入规则,无法正确将患者信息插入appointment表。

修正步骤

  1. 调整查询语句,从patient表中获取包含PMR_NO在内的所有需要的字段。
  2. 验证患者存在后,将查询结果中的字段值赋值给对应的变量。
  3. 修正INSERT语句,直接使用已获取的变量填充字段,确保字段列表与表结构匹配。

修正后的代码示例

elif list_ == 6:
    appt = int(input("""
1. Book appointment
2. Update appointment
3. Delete appointment
0. Exit
ENTER YOUR CHOICE:"""))
    if appt == 1:
        def book_appt(): 
            print('\n') 
            PMR_NO = input('Patient Medical Record Number:')
            # 直接查询指定PMR_NO的完整患者信息
            cur.execute('select PMR_NO, NAME, PHONE_NO, EMAIL_ID, SPONSOR, INSURANCE_ID from patient where PMR_NO = %s', (PMR_NO,))
            patient = cur.fetchone()  # 获取单个患者记录
            
            if patient:
                # 从查询结果中提取字段值
                _, NAME, PHONE_NO, EMAIL_ID, SPONSOR, INSURANCE_ID = patient
                DEPT = input('Department:')
                DOCTOR = input('Doctor\'s name:')
                ID_NO = input('Doctor\'s ID:')
                DATE = input('Appointment Date(YYYY-MM-DD):')
                TIME = input('Appointment Time(HH:MM:SEC):')
                
                # 修正INSERT语句,匹配appointment表的字段列表
                rec3 = '''
                    insert into appointment(DEPT, DOCTOR, ID_NO, DATE, TIME, PMR_NO, NAME, PHONE_NO, EMAIL_ID, SPONSOR, INSURANCE_ID)
                    values(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
                '''
                column3 = (DEPT, DOCTOR, ID_NO, DATE, TIME, PMR_NO, NAME, PHONE_NO, EMAIL_ID, SPONSOR, INSURANCE_ID)
                cur.execute(rec3, column3)
                print("APPOINTMENT BOOKED SUCCESSFULLY")
                print('\n')
                conn.commit()
                admin_det()
            else:
                print('USER NOT FOUND IN THE DATABASE')
                print('PLEASE REGISTER AGAIN')
                admin_det()
        book_appt()

额外说明

  • 使用fetchone()替代循环遍历,更高效地验证患者存在性并获取信息。
  • 需确保appointment表的字段列表与INSERT语句中的字段完全对应,否则会触发字段不匹配错误。
  • 建议将book_appt()函数定义移至外部代码块,避免每次进入分支都重复定义函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:12:48