SQLAlchemy: возвращать существующий объект вместо создания нового при вызове конструктора

Я хочу использовать sqlalchemy таким образом:

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

Обычно sqlalchemy создает две записи для учетной записи и связывает каждый адрес электронной почты с этим. Если я устанавливаю имя учетной записи как уникальное, sqlalchemy выдает исключение, которое сообщает мне, что запись с таким же значением уже существует. Это имеет смысл и работает как ожидалось.

Теперь я сам нашел способ, который позволяет упомянутый код и только один раз создает учетную запись, перезаписываяновый Конструктор класса 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)

Это прекрасно работает для меня. Но вопрос в том,

Это правильный путь?Есть ли способ добиться того же?

используя последнюю версию SQLAlchemy 0.8.x и Python 2.7.x

Спасибо за любую помощь :)

Ответы на вопрос(2)

Ваш ответ на вопрос