SQLite报错‘no such table: Consultation’及外键约束问题求助
问题分析与解决方案
1. 解决「no such table: Consultation」错误
你遇到的表不存在问题,核心原因是数据库连接路径错误:
- SQLite连接时,若文件名未指定
.db后缀,Python会在当前目录创建一个全新的空数据库文件(名称为cabinet_medical_original),而非连接你在BD Browser中操作的、已有表结构的数据库。 - 检查BD Browser中打开的数据库文件名,应为
cabinet_medical_original.db(SQLite默认文件后缀为.db),修改连接代码:connexion = sqlite3.connect('cabinet_medical_original.db') - 额外确认:代码运行的当前工作目录与数据库文件所在目录一致,可通过
print(os.getcwd())打印当前路径,对比数据库文件位置。
2. 修复代码缩进与作用域问题
你的代码存在缩进错误,导致提交、关闭数据库的语句处于函数外部,会引发NameError(connexion和curseur是函数内局部变量,外部无法访问)。修正后代码:
import sqlite3 def ajout_consultation(id_date, code, matricule, numero_ss): # 连接数据库(添加.db后缀) connexion = sqlite3.connect('cabinet_medical_original.db') curseur = connexion.cursor() # 启用外键约束 curseur.execute('PRAGMA foreign_keys = ON') # 保留传入的参数,不要用硬编码值覆盖 nv_consultation = (id_date, code, matricule, numero_ss) # 注释掉硬编码的覆盖语句 # nv_consultation = ('2023-12-07', 2, 1, 12) curseur.execute('INSERT INTO Consultation(id_date, code, matricule, numero_ss) VALUES (?, ?, ?, ?)', nv_consultation) # 提交与关闭操作放在函数内部,确保作用域正确 connexion.commit() curseur.close() connexion.close() # 调用函数 ajout_consultation('2023-12-07', 2, 1, 'stephanie')
3. 解决「FOREIGN KEY constraint failed」错误
手动插入时的外键约束失败,说明插入的字段值不符合外键关联规则:
- 逐一检查
Consultation表的外键字段:code需关联对应诊疗项目表(如Acte)的主键,确认值2是否存在于该表;matricule需关联医生表的主键,确认值1是否存在;numero_ss需关联患者表的主键,确认值'stephanie'(或你之前硬编码的12)是否是患者表中存在的有效社保号;
- 插入前先验证这些外键值在关联表中是否存在,或在BD Browser中先插入对应的关联数据,再执行插入操作。
内容的提问来源于stack exchange,提问作者Lola Grippon
相关产品推荐
相关产品推荐

