SqlAlchemy: создать объект, если он еще не существует?

Я новичок в SQLAlchemy. В настоящее время у меня есть:

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

Как я могу изменить это, чтобы он добавлял объект только в том случае, если он еще не существует? Это было бы неплохо...

model.Session.create_if_does_not_exist(ev)

Спасибо!


person AP257    schedule 16.08.2010    source источник


Ответы (2)


Стандартный шаблон выглядел бы так:

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)

Не очень элегантно (и у меня могут быть синтаксические ошибки - извиняюсь), но работает.

person Alex Wilson    schedule 17.08.2010
comment
Подход кажется правильным, но я думаю, что код действительно сломан. У меня есть кое-что, что работает локально, но это может не квалифицироваться как ЕДИНСТВЕННОЕ верное решение. - person Bruce van der Kooij; 13.12.2011
comment
Хотите поделиться своим решением? - person CadentOrange; 25.01.2013

Я нашел этот рецепт при поиске шаблона для решения аналогичной проблемы у меня есть. Я думаю, что это может быть хорошим и чистым, если не «единственным верным» решением того, что вы изначально искали.

person jhnwsk    schedule 01.06.2013