SQLAlchemy: Gibt ein vorhandenes Objekt zurück, anstatt beim Aufruf des Konstruktors ein neues zu erstellen

Ich möchte sqlalchemy folgendermaßen verwenden:

email1 = EmailModel(email="[email protected]", account=AccountModel(name="username"))
email2 = EmailModel(email="[email protected]", account=AccountModel(name="username"))

In der Regel erstellt sqlalchemy zwei Einträge für das Konto und verknüpft jede E-Mail-Adresse damit. Wenn ich den Kontonamen als einzigartig setze, löst sqlalchemy eine Ausnahme aus, die mich über einen bereits vorhandenen Eintrag mit demselben Wert informiert. Das macht Sinn und funktioniert wie erwartet.

Jetzt habe ich einen eigenen Weg gefunden, der den genannten Code erlaubt und nur ein einziges Mal ein Konto durch Überschreiben des Codes erstelltNeu Konstruktor der AccountModel-Klasse:

def __new__(*cls, **kw):
    if len(kw) and "name" in kw:
        x = session.query(cls.__class__).filter(cls[0].name==kw["name"]).first()
        if x: return x
    return object.__new__(*cls, **kw)

Das funktioniert perfekt für mich. Aber die Frage ist:

Ist das der richtige Weg?Gibt es eine Methode der SQLalchemie, um dasselbe zu erreichen?

Ich verwende die neueste Version 0.8.x von SQLAlchemy und Python 2.7.x

Danke für jede Hilfe :)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage