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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:42:36