get_or_create failure mit Django und Postgres (doppelter Schlüsselwert verletzt eindeutige Einschränkung)

9

Danke, dass Sie sich die Zeit genommen haben, meine Frage zu lesen.

Ich habe eine Django-App mit dem folgenden Modell:

%Vor%

In einer Ansicht:

%Vor%

Alles funktioniert gut, außer dass die Postgres Logs voll mit doppelten Schlüsselfehlern sind:

%Vor%

Versuchte andere Lösung, z. B.

%Vor%

Das hilft nur für MySQL? Kann jemand die doppelten Schlüsselwertfehler für postgres avaid?

    
Barmi 15.02.2012, 16:42
quelle

4 Antworten

3

Ich hatte Probleme mit get_or_create bei der Verwendung von Postgres. Am Ende habe ich den Standardcode für traditionelle aufgegeben:

%Vor%     
MagicLAMP 10.12.2014 05:45
quelle
1

Hatten Sie irgendwann einmal unique = True in Visits Profilfeld?

Es sieht so aus, als ob es eine einzigartige Einschränkung für Postgres gibt, die noch in Kraft ist. "table_visit_profile_id_key" ist der Name, der automatisch generiert wird, und würde natürlich diese Fehler verursachen, wenn Sie mehrere Besuche für einen Benutzer aufzeichnen.

Wenn dies der Fall ist, verwenden Sie South , um Ihre Datenbankänderungen zu verwalten? Wenn Sie nicht sind, greifen Sie es!

    
Gwilym Humphreys 15.02.2012 16:55
quelle
1

Ein weiterer möglicher Grund für diese Fehler in get_or_create() ist die fehlende Übereinstimmung der Datentypen in einem der Suchfelder - z. B. die Übergabe von False anstelle von None in ein Feld, für das keine Werte zulässig sind. Das .get() in% .get_or_create() findet es nicht und Django wird mit der Erstellung neuer Zeilen fortfahren - was aufgrund von PostgreSQL-Einschränkungen fehlschlägt.

    
kravietz 20.04.2016 17:15
quelle
0

PostgreSQL verhält sich in einigen subtilen Abfragen etwas anders, was zu IntegrityError -Fehlern führt, besonders nachdem Sie zu Django 1.6 gewechselt haben. Hier ist die Lösung - Sie müssen jedem fehlgeschlagenen Modell die Option select_on_save hinzufügen:

%Vor%

Es ist hier dokumentiert: Options.select_on_save

    
kravietz 21.11.2013 12:30
quelle

Tags und Links