Ich möchte wie diese sqlalchemy in einer Art und Weise nutzen:SQLAlchemy: return Objekt vorhandenen, anstatt eine neue zu schaffen, wenn Aufruf Konstruktor
email1 = EmailModel(email="[email protected]", account=AccountModel(name="username"))
email2 = EmailModel(email="[email protected]", account=AccountModel(name="username"))
Normalerweise sqlalchemy zwei Einträge für das Konto erstellen und verknüpfen jede E-Mail-Adresse Dies. Wenn ich den accountname als einzigartig einstelle, wirft sqlalchemy eine Exception, die mir sagt, dass bereits ein Eintrag mit demselben Wert existiert. Dies macht alles Sinn und funktioniert wie erwartet.
Nun dachte ich durch meine eigenen ein Ausweg, die den genannten Code ermöglicht und schafft nur ein nur einmal Konto durch die die neuen Constructor der AccountModel Klasse überschreiben:
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)
Dies funktioniert perfekt für mich. Aber die Frage ist:
- Ist das der richtige Weg?
- Gibt es einen sqlalchemy Weg, das gleiche zu erreichen?
Ich verwende die neueste 0.8.x SQLAlchemy Version und Python 2.7.x
Vielen Dank für jede Hilfe :)
Oukay, das ist genau das, was ich gesucht habe! –