Ich habe eine Datei namens sweigartcats.db, die eine Tabelle namens „cats“ enthält. Dies sind ihre Spalten:
Code: Select all
>>> 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)]
Code: Select all
>>> 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')
Code: Select all
>>> conn.execute('INSERT INTO vaccinations VALUES ("rabies", "2023-06-06", "Dr. Echo", 1)')
Code: Select all
sqlite3.OperationalError: foreign key mismatch - "vaccinations" referencing "cats"
Code: Select all
>>> conn.execute('SELECT * FROM cats INNER JOIN vaccinations ON cats.rowid =
vaccinations.cat_id').fetchall()
Ich bin mir nicht sicher, ob Es wird benötigt, aber hier sind die Abfragen, die zum Erstellen der Originaldatei verwendet wurden: https://pastebin.com/neG0q4Ai
Ich habe die SQLite3-Dokumente und einige Fragen hier überprüft und anscheinend könnte es ein Problem mit der Verwendung von rowid als Fremdschlüssel geben, aber ich bin damit nicht sehr vertraut, daher kann ich nicht sicher sein, auch die Tatsache, dass es im Buch ohne Rücksicht auf Fehler steht und ich in dieser speziellen Lektion niemanden mit dem gleichen Fehler finden konnte, könnte ein Grund dafür sein Ich verstehe etwas falsch.
Eines der Übungsprogramme am Ende dieses Kapitels besteht darin, die Impfungen der Katzen zu überprüfen, sodass ich es nur tun kann, wenn ich es zuerst hinbekomme.
Ich entschuldige mich, wenn ich vergessen habe, eine wichtige Information hinzuzufügen, und ich werde sie bei Bedarf hinzufügen.
Mobile version