SQLAlchemy: zwraca istniejący obiekt zamiast tworzyć nowy podczas wywoływania konstruktora

Chcę używać sqlalchemy w taki sposób:

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

Zwykle sqlalchemy tworzy dwa wpisy dla konta i łączy z nim każdy adres e-mail. Jeśli ustawię nazwę konta jako unikalną sqlalchemy, wyrzucany jest wyjątek, który mówi mi o wpisie o tej samej wartości już istnieje. Wszystko to ma sens i działa zgodnie z oczekiwaniami.

Teraz sam wymyśliłem sposób, który pozwala na wspomniany kod i po prostu tworzy konto tylko raz, zastępującNowy Konstruktor klasy AccountModel:

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)

To działa dla mnie doskonale. Ale pytanie brzmi:

Czy to właściwy sposób?Czy istnieje sposób na osiągnięcie tego samego w sqlalchemy?

Używam najnowszej wersji 0.8.x SQLAlchemy i Pythona 2.7.x

Dzięki za pomoc :)

questionAnswers(2)

yourAnswerToTheQuestion