2010-08-16 4 views
7

Sono nuovo di SQLAlchemy. Al momento dispongo di:SqlAlchemy: crea l'oggetto se non esiste già?

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

Come posso modificare questo in modo che aggiunge solo l'oggetto se non esiste già? Sarebbe bello ...

model.Session.create_if_does_not_exist(ev) 

Grazie!

risposta

3

Il modello standard sembrerebbe essere:

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) 

Non eccessivamente elegante (e forse ho errori di sintassi - Apologies) ma non il lavoro.

+0

L'approccio sembra corretto, ma penso che il codice sia effettivamente rotto. Ho qualcosa a livello locale che funziona, ma potrebbe non essere qualificato come "L'unica vera soluzione". –

+0

Cura di condividere la tua soluzione? – CadentOrange

2

Ho trovato this recipe mentre cercavo un modello per risolvere un problema simile che ho. Penso che questa potrebbe essere una soluzione carina e pulita se non "The One True" a ciò che cercavi in ​​origine.