2010-08-16 37 views
7

我是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) 

謝謝!

回答

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) 

不是非常優雅(我可能有語法錯誤 - 道歉),但做這項工作。

+0

該方法似乎是正確的,但我認爲代碼確實被破壞了。我有本地的東西可行,但它可能不符合「ONe真正的解決方案」的要求。 – 2011-12-13 09:43:50

+0

小心分享您的解決方案? – CadentOrange 2013-01-25 12:26:29

2

我發現this recipe,同時尋找一種模式來解決我有類似的問題。我認爲如果不是你最初尋找的「真正的」解決方案,這可能是一個不錯的和乾淨的。