Почему ограничения ссылочной целостности не работают в моем коде? Как я могу это исправить? - PullRequest
1 голос
/ 08 ноября 2019

Я сделал dno своим основным ключом в таблице Departmentdum1, а dno в sigdum14 ссылается на атрибут dno таблицы tabledum1. Я должен получить ошибку при выполнении этого кода, потому что я пытаюсь установить значение dno как 5 вТаблица sigdum14, которая должна показывать ошибку, но не показывает

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();

подключено создано выполнить выполнено выполнено выполнено desc done

Вывод неправильный !!

1 Ответ

1 голос
/ 08 ноября 2019

sqlite не применяет ограничения внешнего ключа по умолчанию. Однако вы можете изменить это поведение, добавив следующую строку:

conn.execute("PRAGMA foreign_keys = 1")

сразу после открытия соединения.

Подробнее см. глава 2 документа:

Чтобы использовать ограничения внешнего ключа в SQLite, библиотека должна быть скомпилирована без определения SQLITE_OMIT_FOREIGN_KEY или SQLITE_OMIT_TRIGGER. [...]

Если библиотека скомпилирована с включенными ограничениями внешнего ключа, она должна быть включена приложением во время выполнения с использованием команды PRAGMA foreign_keys.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...