Zurücksetzen Datenbanken mit OneToOneField mit Überquerung verschiedene Anwendungen in Django

StackOverflow https://stackoverflow.com/questions/1073162

Frage

Ich erhalte die folgende Fehlermeldung, wenn ich ./manage.py reset app1 ausführen:

Error: Error: app1 couldn't be reset. Possible reasons:
  * The database isn't running or isn't configured correctly.
  * At least one of the database tables doesn't exist.
  * The SQL was invalid.
Hint: Look at the output of 'django-admin.py sqlreset app2'. That's the SQL this command     wasn't able to run.
The full error: (1217, 'Cannot delete or update a parent row: a foreign key constraint fails')

mit einem Modell, das mit einem anderen Modell in einer anderen App OneToOneField hat (sie app2 sagen). Ich verwende MySQL InnoDB. Genauer gesagt, OneToOneField wird in app2 Modell erklärt.

Wie kann ich loswerden diese Fehler?

Update: Der Ausgang des sqlreset Befehl lautet:

(app1)

BEGIN;
DROP TABLE `app1_instance`;
DROP TABLE `app1_instancegroup`;
CREATE TABLE `app1_instancegroup` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    -- some more fields
)
;
CREATE TABLE `app1_instance` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `belongs_to_id` integer NOT NULL,
    -- some more fields
)
;
ALTER TABLE `app1_instance` ADD CONSTRAINT `belongs_to_id_refs_id_455b868f` FOREIGN KEY (`belongs_to_id`) REFERENCES `app1_instancegroup` (`id`);
CREATE INDEX `app1_instance_belongs_to_id` ON `app1_instance` (`belongs_to_id`);
COMMIT;

(app2)

BEGIN;
DROP TABLE `app2_team`;
CREATE TABLE `app2_team` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `instance_group_id` integer NOT NULL UNIQUE,
    -- some more fields
)
;
ALTER TABLE `app2_team` ADD CONSTRAINT `instance_group_id_refs_id_39493b52` FOREIGN KEY (`instance_group_id`) REFERENCES `app1_instancegroup` (`id`);
COMMIT;
War es hilfreich?

Lösung

Ein Schritt, der manuell machen kann Zurücksetzen einfacher ist (und vermeiden die Angst ERROR 1217):

SET foreign_key_checks = 0

http: // dev. mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html :

  

InnoDB ermöglicht es Ihnen nicht ein Drop   Tabelle, die von einem ausländischen verwiesen wird   KEY-Einschränkung, es sei denn, Sie tun SET   foreign_key_checks = 0. Wenn Sie fallen   eine Tabelle, die die Nebenbedingungen waren   definiert in seiner schaffen Aussage sind   ebenfalls gelöscht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top