2013-05-15 25 views
9

Ich benutze Django + MySQL. Manchmal füge ich doppelte Daten in meine Datenbank ein, was dazu führt, dass django eine IntegrityErrror auslöst.Django - Unterscheiden Sie verschiedene Arten von IntegrityError

Das Problem ist, verwenden Django/Python den gleichen Fehler für mehrere der verschiedenen MySQL errors. Die einzige Möglichkeit, zwischen ihnen zu unterscheiden, besteht darin, den Fehlercode zu betrachten. Zum Beispiel

try: 
    # code that raises integrity error 
except IntegrityError 
    if e.args[0] == 1062: 
     raise CustomCreatedDuplicateEntryError 
    else: 
     raise e 

Meine Frage ist: Ist das sicher zu tun? Wenn ja, warum wird dies nicht auf einer niedrigeren Ebene umgesetzt? Es scheint, als könnte ich nicht der Einzige sein, der eine feinere Kontrolle über IntegrityError will.

Danke!

EDIT

-Code diesen Fehler

class Foo(django.db.models.Model): 
    guid = models.CharField(max_length=32, db_index=True, unique=True) 

Foo(guid=a).save() 
# this raises an IntegrityError with code 1062! 
Foo(guid=a).save() 
+0

Können Sie den Code hochladen, der den Integritätsfehler verursacht? –

+0

@ScottWoodall, hinzugefügt :) Ich bin nicht sicher, ob dies hilfreich sein wird, es ist ein sehr häufiger Fehler in Django (viele Fragen zu SO fragen, warum es ausgelöst wird) – djs22

+2

Ist nicht der Grund, nur dass diese Fehlernummern sind Datenbank-Engine-abhängig? –

Antwort

3

Ist das sicher zu tun zu erhöhen?

Dies ist nicht unsicher. Sie haben damit eine Kopplung zwischen Ihrer Anwendung und der Datenbank (MySQL) geschaffen. Was passiert, wenn Sie sich entscheiden, MySQL durch eine andere Datenbanklösung zu ersetzen? Die Fehlercodes werden geändert und Ihr Code wird zu inkonsistenten Meldungen führen.

Wenn ja, warum wird dies nicht auf einer niedrigeren Ebene implementiert?

Wahrscheinlich für die gleiche Sorge, die ich habe.

+1

Es scheint mir seltsam, dass ein db agnostic ORM wie Django nicht nur die Fehlercodes für mehrere Datenbanken zuordnen. Sehen Sie die Konversation in den Kommentaren zu der Frage für Andrews Meinung zu diesem – djs22

+0

Vielleicht ist das der Job, der für eine Erweiterung geeignet ist, nicht das ORM selbst. Es wird eine Menge Aufwand erfordern, um das zu tun, was Sie den ORM-Entwicklern vorschlagen, mit sehr geringem ROI. – rubayeet

Verwandte Themen