【问题标题】:sqlalchemy easy way to insert or update?sqlalchemy 插入或更新的简单方法?
【发布时间】:2009-09-05 04:33:13
【问题描述】:

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

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()

有没有更简单的方法?

【问题讨论】:

标签: python sqlalchemy


【解决方案1】:

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

【讨论】:

  • session.save() 在新版本的 sqlalchemy 中似乎不再存在。
  • 我认为它不适用于mysql。我试过了,没有用。有人可以证实这一点吗?
  • 我正在使用 sqlalchemy 1.1.10
猜你喜欢
  • 2011-12-14
  • 2012-08-30
  • 2010-11-04
  • 2014-08-08
  • 1970-01-01
  • 2011-06-14
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多