代码之家  ›  专栏  ›  技术社区  ›  Eloff

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

  •  43
  • Eloff  · 技术社区  · 16 年前

    其中一些是存在的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 回复  |  直到 16 年前
        1
  •  48
  •   Stephen Fuhry Bobby    11 年前

    new_obj = session.merge(obj) 。如果主键匹配,这将把处于分离状态的对象合并到会话中,否则将创建一个新的对象。所以 session.save(new_obj) 将同时适用于插入和更新。