Python+MySQL医院预约系统报错:NAME未定义,求解决方法
问题解决:NameError 修正方案
错误原因
- 触发
NameError是因为代码中用到的NAME、PHONE_NO、EMAIL_ID、SPONSOR、INSURANCE_ID变量未被定义,当前仅查询了patient表的PMR_NO字段,没有获取患者的其他关联信息。 - 同时INSERT语句语法错误,子查询的写法不符合MySQL插入规则,无法正确将患者信息插入appointment表。
修正步骤
- 调整查询语句,从patient表中获取包含
PMR_NO在内的所有需要的字段。 - 验证患者存在后,将查询结果中的字段值赋值给对应的变量。
- 修正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
相关产品推荐
相关产品推荐

