Проблема удаления данных в дочерней таблице

Рейтинг: 0Ответов: 1Опубликовано: 13.02.2023

Создал 2 таблицы через sqlite studio.

В одной таблице данные с Primary Key, во второй соответственно с Foreign Key (on delete = cascade).

Когда делал наполнение таблиц, всё работало. Но когда дело дошло до удаления данных из таблицы, возникла проблема.

Если я удаляю элемент из родительской таблицы, то в дочерней элементы остаются не удалёнными. Если удаляю через sqlite studio, то все работает как должно.

Пробовал двумя способами, и оба оставляют данные в дочерней таблице.

Первый способ

class Database:
    def __init__(self, db_file):
        self.connection = sqlite3.connect(db_file)
        self.cursor = self.connection.cursor()

    def del_direction(self, name_direction):
        with self.connection:
            self.cursor.execute("DELETE FROM direction WHERE name_direction = ?", (name_direction,))

Второй способ

    def delete_direction(name_direction):
        connection = sqlite3.connect('database_dance.db')
        cursor = connection.cursor()
        cursor.execute("DELETE FROM direction WHERE name_direction = ?", (name_direction,))
        connection.commit()
        connection.close()

Ответы

▲ 1

я так понял, что sqlite3 не поддерживает по умолчанию foreign key и нужно в моем случае прописать в инициализаторе self.connection("PRAGMA foreign_keys = 1") и тогда все дочерние элементы удаляются при удалении родительских

class Database:
    def __init__(self, db_file):
        self.connection = sqlite3.connect(db_file)
        self.connection("PRAGMA foreign_keys = 1")
        self.cursor = self.connection.cursor()