2016-08-20 2 views
2

Es gibt eine längere SQL-Abfrage, die ich ausführen muss, um Daten von einer Tabelle zu einer anderen zu migrieren. Es funktionierte gut bis zu dieser Woche, als ich nach Django 1.9.2 und Python 3.5 migrierte.Django IntegrityError: kein Standardwert

Das Problem ist, dass die Tabelle ein Feld 'last_update' hat, das standardmäßig NULL ist. Die Tabellendefinition ist

last_update = models.DateTimeField("last updated",null=True, auto_now_add=False, auto_now=True) 

ich auch mit MySQL Workbench und die Tabelle geprüft haben, ist in der Tat gesetzt NULLs auf diesem Gebiet zu ermöglichen, und der Standardwert ist NULL.

Die Abfrage stürzt nach etwa 30 Minuten mit der Fehlermeldung:

django.db.utils.IntegrityError: (1364, "Field 'last_update' doesn't have a default value") 

Sehr reizend! Wie kann ich Zeilen in diese Tabelle einfügen?

pro Anfrage, hier ist die Tabellendefinition:

CREATE TABLE `google_pla_plaproducts` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `product_code` varchar(55) CHARACTER SET utf8 NOT NULL, 
    `min_bid` decimal(20,4) NOT NULL, 
    `current_bid` decimal(20,4) NOT NULL, 
    `max_bid` decimal(20,4) NOT NULL, 
    `creation_date` datetime(6), 
    `last_update` datetime(6) DEFAULT NULL, 
    `status_change` datetime(6) DEFAULT NULL, 
    `starting_bid` decimal(20,4) NOT NULL, 
    `adgroup_id` int(11) NOT NULL, 
    `status_id` int(11) NOT NULL, 
    `product_price` decimal(20,4) NOT NULL, 
    PRIMARY KEY (`id`,`product_code`,`adgroup_id`), 
    KEY `google_p_adgroup_id_3b7c9d4ecddd04ba_fk_google_pla_plaadgroup_id` (`adgroup_id`), 
    KEY `google_pla_plaprod_status_id_2f8113a5ef0dd021_fk_globs_status_id` (`status_id`), 
    KEY `idx_prod_code` (`product_code`), 
    CONSTRAINT `google_p_adgroup_id_3b7c9d4ecddd04ba_fk_google_pla_plaadgroup_id` FOREIGN KEY (`adgroup_id`) REFERENCES `google_pla_plaadgroup` (`id`), 
    CONSTRAINT `google_pla_plaprod_status_id_2f8113a5ef0dd021_fk_globs_status_id` FOREIGN KEY (`status_id`) REFERENCES `globs_status` (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=88949 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; 
+0

Können Sie die SQL-Definition der Tabelle, die Workbench erzeugt, hinzufügen? –

+0

Beachten Sie auch, dass die Tabelle tatsächlich null Werte für dieses Feld enthält! – dengar81

+0

Vielleicht hinzufügen 'models.DateTimeField (default = None, ...)' – JulienD

Antwort

0

updated = models.DateTimeField(default=None, auto_now=True, auto_now_add=False)

dies funktionieren sollte. Ich habe das schon mal benutzt und es funktioniert gut für mich.

+0

Sie brauchen nicht "auto_now" und "auto_now_add". Aus dem [docs] (https://docs.djangoproject.com/en/1.10/ref/models/fields/#django.db.models.DateField): "Die Optionen auto_now_add, auto_now und default schließen sich gegenseitig aus Die Kombination dieser Optionen führt zu einem Fehler. " – joshlsullivan

+0

@Rohit Chopra: Nein, das war es nicht. Es hat irgendwie wieder funktioniert. Vielleicht nach dem Herumspielen mit den Migrationsdateien ... – dengar81

0

Ich habe die Tabelle ein paar Mal geändert. Ich habe den Vorschlag von Rohit nicht versucht, da der Standardwert = None ist. Es begann wieder zu arbeiten, nachdem mehrere DB-Migrationen verwendet wurden.

Verwandte Themen