Python 3.x 为什么引用完整性约束在我的代码中不起作用?我该如何解决这个问题?
我已将dno作为departmentdum1表中的主键,而sigdum14中的dno引用了departmentdum1表dno属性。我在执行此代码时应该会得到错误,因为我试图将dno值设置为5,在sigdum14表中应该会显示错误,但不会显示Python 3.x 为什么引用完整性约束在我的代码中不起作用?我该如何解决这个问题?,python-3.x,sqlite,jupyter-notebook,Python 3.x,Sqlite,Jupyter Notebook,我已将dno作为departmentdum1表中的主键,而sigdum14中的dno引用了departmentdum1表dno属性。我在执行此代码时应该会得到错误,因为我试图将dno值设置为5,在sigdum14表中应该会显示错误,但不会显示 from tkinter import * import sqlite3 conn = sqlite3.connect('Form.db') print("connected") conn.execute('create table department
from tkinter import *
import sqlite3
conn = sqlite3.connect('Form.db')
print("connected")
conn.execute('create table departmentdum1 (d_name varchar(20),dno int
primary key)')
print("created");
conn.execute('insert into departmentdum1 values("computer science",1)')
print("execute");
conn.execute('insert into departmentdum1 values("Information
science",2)')
print("execute");
conn.execute('create table sigdum14 ( y_name varchar(20),dno integer,
foreign key(dno) REFERENCES departmentdum1(dno))') ;
print("created");
conn.execute('insert into sigdum14 values("kim",5)')
print("execute");
print("desc done");
conn.commit();
连接的
创建
执行
执行
创建
执行
描述完成
输出错误 默认情况下,sqlite不强制外键约束。但是,您可以通过添加以下行来更改此行为:
conn.execute("PRAGMA foreign_keys = 1")
刚刚打开连接
有关更多详细信息,请参阅文档的第页:
为了在SQLite中使用外键约束,必须在编译库时既不定义SQLite\u OMIT\u foreign\u key
也不定义SQLite\u OMIT\u TRIGGER
。[……]
假设库是在启用外键约束的情况下编译的,则应用程序仍必须在运行时使用PRAGMA foreign_keys
命令启用库
您的代码不会验证用于创建外键约束的SQL命令是否实际成功。可能是失败了。如果使用显示结构和约束的SQLite GUI浏览数据库文件,会发生什么情况?