2010-08-16 13 views
7

Ich bin neu bei SQLAlchemy. Ich habe derzeit:SqlAlchemy: Objekt erstellen, wenn es nicht bereits existiert?

ev = model.EnumerationValue(key=key_level_2, code=level_2) 
ev.keyvalues[key_parent] = level_1 
model.Session.add(ev) 

Wie kann ich dies ändern, so dass es nur das Objekt hinzufügt, wenn es nicht bereits existiert? Das wäre nett ...

model.Session.create_if_does_not_exist(ev) 

Danke!

Antwort

3

Das Standardmuster scheint zu sein:

ev = model.Session.query(model.EnumerationValue).filter(model.EnumerationValue.key==key_level_2).filter(model.EnumerationValue.code==level_2).count() 
if not ev: 
    ev = model.EnumerationValue(key=key_level_2, code=level_2) 
    ev.keyvalues[key_parent] = level_1 
    model.Session.add(ev) 

Nicht besonders elegant (und ich kann Syntaxfehler haben - Entschuldigungen), sondern macht die Arbeit.

+0

Der Ansatz scheint richtig, aber ich denke, der Code ist in der Tat gebrochen. Ich habe etwas lokal, das funktioniert, aber es könnte nicht als "The ONe True Solution" qualifiziert werden. –

+0

Möchten Sie Ihre Lösung teilen? – CadentOrange

2

Ich habe this recipe gefunden, während ich nach einem Muster suche, um ein ähnliches Problem zu lösen, das ich habe. Ich denke, das könnte eine nette und saubere, wenn nicht 'The One True' Lösung zu dem sein, wonach Sie ursprünglich gesucht haben.

Verwandte Themen