SqlAlchemy:如果不存在则创建对象?

时间:2010-08-16 11:18:31

标签: 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)

谢谢!

2 个答案:

答案 0 :(得分:3)

标准模式似乎是:

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)

不是非常优雅(我可能有语法错误 - 道歉)但是做了工作。

答案 1 :(得分:2)

我在寻找解决类似问题的模式时找到了this recipe 。我认为这可能是一个很好的,干净的,如果不是'The One True'解决方案,你原本想要的。