SqlAlchemy: создать объект, если он еще не существует? - PullRequest
7 голосов
/ 16 августа 2010

Я новичок в 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)

Спасибо!

Ответы [ 2 ]

3 голосов
/ 17 августа 2010

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

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)

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

2 голосов
/ 01 июня 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...