sqlalchemy简单的插入或更新方式?

时间:2009-09-05 04:33:14

标签: python sqlalchemy

我有一系列新对象。它们看起来都像这样:

Foo(pk_col1 = x,pk_col2 = y,val ='bar')

其中一些是存在的Foo(即只有val与db中的行不同) 并应生成更新查询。其他人应该生成插入。

我可以想到几种方法,最好的方式:

pk_cols = Foo.table.primary_key.keys()
for f1 in foos:
    f2 = Foo.get([getattr(f1, c) for c in pk_cols])
    if f2 is not None:
        f2.val = f1.val # update
        # XXX do we need to do session.add(f2) 
        # (or at least keep f2 alive until after the commit?)
    else:
        session.add(f1) # insert

 session.commit()

有更简单的方法吗?

1 个答案:

答案 0 :(得分:50)

我认为你在new_obj = session.merge(obj)之后。如果主键匹配,这将将处于分离状态的对象合并到会话中,否则将生成新的对象。因此session.save(new_obj)将适用于插入和更新。