2010-08-16 16 views
7

Soy nuevo en SQLAlchemy. Actualmente tengo:SqlAlchemy: crea un objeto si no existe ya?

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

¿Cómo puedo cambiar esto para que solo agregue el objeto si no existe? Esto sería bueno ...

model.Session.create_if_does_not_exist(ev) 

¡Gracias!

Respuesta

3

El patrón estándar parece ser:

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) 

No es terriblemente elegante (y puede que tenga errores de sintaxis - disculpas) pero cumple su cometido.

+0

El enfoque parece correcto, pero creo que el código está realmente roto. Tengo algo localmente que funciona, pero podría no calificar como "La única solución verdadera". –

+0

¿Te importa compartir tu solución? – CadentOrange

2

He encontrado this recipe mientras buscaba un patrón para resolver un problema similar que tengo. Creo que esta podría ser una solución agradable y limpia si no fuera 'The One True' para lo que originalmente estabas buscando.

Cuestiones relacionadas