Проблема с ограничениями внешних ключей при создании таблиц peewee - PullRequest
1 голос
/ 02 марта 2020

У меня есть следующие таблицы базы данных sqlite:

CREATE TABLE IF NOT EXISTS Channel (
    channel_id integer UNIQUE NOT NULL,
    channel_name text UNIQUE NOT NULL,
    PRIMARY KEY (channel_id)
);

CREATE TABLE IF NOT EXISTS User_banned (
    user_id integer NOT NULL,
    login_name text NOT NULL,
    channel_id integer NOT NULL,
    ban_timestamp real NOT NULL,
    PRIMARY KEY (user_id, channel_id, ban_timestamp),
    FOREIGN KEY (channel_id) REFERENCES channel (channel_id) ON DELETE CASCADE
);

CREATE TABLE IF NOT EXISTS Message_deleted (
    user_id integer NOT NULL,
    channel_id integer NOT NULL,
    ban_timestamp real NOT NULL,
    message_timestamp real NOT NULL,
    message text NOT NULL,
    PRIMARY KEY (user_id, message_timestamp),
    FOREIGN KEY (user_id, channel_id, ban_timestamp) REFERENCES User_banned (user_id, channel_id, ban_timestamp) ON DELETE CASCADE
);

Я сгенерировал модель peewee с помощью pwiz, добавив аргумент on_delete='CASCADE' для всех внешних ключей, потому что pwiz не генерирует ее и подключается к базе данных с помощью прагм. 'foreign_keys': 1.

У меня есть этот код для теста:

database.connect()
database.create_tables([Channel, UserBanned, MessageDeleted])

Channel.create(channel_id=1111, channel_name="channel1")
UserBanned.create(ban_timestamp=4551, login_name="d", channel=1111, user_id=511)
MessageDeleted.create(ban_timestamp=4551, message="message", message_timestamp=4511, channel=1111, user=511)

print(Channel.delete().execute())
database.close()

Когда я создаю таблицы путем импорта файла sql с помощью sqlitebrowser, у меня нет проблем, но если таблицы созданы peewee, я получил эту ошибку: peewee.OperationalError: foreign key mismatch - "Message_deleted" referencing "User_banned"

...