Top.Mail.Ru
Ответы

Отношения между таблицами. Один-к-одному


В запрос, который создаёт таблицу ice_cream, добавьте создание связанной таблицы wrappers — в ней будут храниться названия обёрток для мороженого.

В таблице wrappers должны быть два поля. Название обёртки должно храниться в текстовом поле name.

Каждая запись из таблицы ice_cream может ссылаться на одну из записей в таблице wrappers: у каждого мороженого может быть одна уникальная обёртка. Два разных мороженых не могут ссылаться на одну обёртку.

У некоторых сортов мороженого может и не быть обёртки, так что связь — не обязательна; в таблице ice_cream значение поля, ссылающегося на таблицу wrappers, может быть NULL.

123456789101112131415161718192021222324
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-й части запроса.'' что делать?

По дате
По рейтингу
Аватар пользователя
8мес

Вы дважды создаете таблицу ice_cream.

Аватар пользователя
Ученик
6мес
Изменено

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)

);

''')

Аватар пользователя
Мудрец
8мес
Изменено
1234567891011121314
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) 
);


Видео по теме