Отношения между таблицами. Один-к-одному
В запрос, который создаёт таблицу ice_cream, добавьте создание связанной таблицы wrappers — в ней будут храниться названия обёрток для мороженого.
В таблице wrappers должны быть два поля. Название обёртки должно храниться в текстовом поле name.
Каждая запись из таблицы ice_cream может ссылаться на одну из записей в таблице wrappers: у каждого мороженого может быть одна уникальная обёртка. Два разных мороженых не могут ссылаться на одну обёртку.
У некоторых сортов мороженого может и не быть обёртки, так что связь — не обязательна; в таблице ice_cream значение поля, ссылающегося на таблицу wrappers, может быть NULL.
import sqlite3
con = sqlite3.connect('db.sqlite')
cur = con.cursor()
cur.executescript('''
CREATE TABLE IF NOT EXISTS ice_cream(
id INTEGER PRIMARY KEY,
name TEXT,
description TEXT
);
CREATE TABLE IF NOT EXISTS ice_cream(
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
description TEXT,
wrapper_id INTEGER UNIQUE,
FOREIGN KEY(wrapper_id) REFERENCES wrappers(id)
);
''')
con.commit()
con.close()вылезает ошибка ''Убедитесь, что вызываете команду CREATE TABLE или CREATE TABLE IF NOT EXISTS для таблицы wrappers в 1-й части запроса.'' что делать?
Вы дважды создаете таблицу ice_cream.
cur.executescript('''
CREATE TABLE IF NOT EXISTS wrappers(
id INTEGER PRIMARY KEY,
name TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS ice_cream(
id INTEGER PRIMARY KEY,
name TEXT,
description TEXT,
wrapper_id INTEGER NOT NULL UNIQUE,
FOREIGN KEY (wrapper_id) REFERENCES wrappers(id)
);
''')
CREATE TABLE IF NOT EXISTS wrappers(
id INTEGER PRIMARY KEY,
name TEXT
);
CREATE TABLE IF NOT EXISTS ice_cream(
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
description TEXT,
wrapper_id INTEGER,
FOREIGN KEY(wrapper_id) REFERENCES wrappers(id),
UNIQUE(name, wrapper_id)
);