У меня есть файл sweigartcats.db, содержащий таблицу «cats», вот ее столбцы:
Код: Выделить всё
>>> conn.execute('PRAGMA TABLE_INFO(cats)').fetchall()
[(0, 'name', 'TEXT', 1, None, 0), (1, 'birthdate', 'TEXT', 0, None, 0), (2, 'fur', 'TEXT', 0, None, 0), (3, 'weight_kg', 'REAL', 0, None, 0)]
Код: Выделить всё
>>> conn.execute('CREATE TABLE IF NOT EXISTS vaccinations (vaccine TEXT,
date_administered TEXT, administered_by TEXT, cat_id INTEGER,
FOREIGN KEY(cat_id) REFERENCES cats(rowid)) STRICT')
Код: Выделить всё
>>> conn.execute('INSERT INTO vaccinations VALUES ("rabies", "2023-06-06", "Dr. Echo", 1)')
Код: Выделить всё
sqlite3.OperationalError: foreign key mismatch - "vaccinations" referencing "cats"
Код: Выделить всё
>>> conn.execute('SELECT * FROM cats INNER JOIN vaccinations ON cats.rowid =
vaccinations.cat_id').fetchall()
Я не уверен, что это необходимо, но вот запросы, использованные для создания исходного файла: https://pastebin.com/neG0q4Ai
Я проверил документацию sqlite3 и несколько вопросов здесь, и, по-видимому, может возникнуть проблема с использованием rowid в качестве внешнего ключа, но я не очень знаком с ним, поэтому не могу быть уверен, а также тот факт, что он находится в книге без каких-либо ошибок, и я не смог найти кого-либо еще с такой же ошибкой в этом конкретном уроке, что может означать Я что-то ошибаюсь.
Одна из практических программ в конце этой главы включает проверку прививок кошек, поэтому я смогу сделать это только в том случае, если сначала смогу выполнить эту работу.
Прошу прощения, если я забыл добавить важную информацию, и я добавлю ее, если необходимо.>
Подробнее здесь: https://stackoverflow.com/questions/798 ... sing-forei
Мобильная версия