SQLAlchemy: retorna o objeto existente em vez de criar um novo on ao chamar o construtor

Eu quero usar sqlalchemy de uma maneira como esta:

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

Normalmente, o sqlalchemy criará duas entradas para a conta e vinculará cada endereço de email a isso. Se eu definir o nome da conta como sqlalchemy exclusivo está jogando uma exceção que me diz sobre uma entrada com o mesmo valor já existe. Isso faz todo o sentido e funciona como esperado.

Agora eu descobri um jeito por conta própria que permite o código mencionado e apenas cria uma conta apenas uma vez sobrescrevendo o códigoNovo Construtor da classe 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)

Isso está funcionando perfeitamente para mim. Mas a questão é:

Esta é a maneira correta?Existe uma maneira de alcançar o mesmo?

Estou usando a versão mais recente do 0.8.x SQLAlchemy e o Python 2.7.x

Obrigado por qualquer ajuda :)

questionAnswers(2)

yourAnswerToTheQuestion