Python sqlalchemy插入或更新的简单方法?
我有一系列新对象。它们看起来都像这样: Foo(pk_col1=x,pk_col2=y,val='bar') 其中一些是存在的Foo(即,只有val与db中的行不同) 并应生成更新查询。其他人应该生成插入 我可以想出几种方法来做到这一点,最好的方法是:Python sqlalchemy插入或更新的简单方法?,python,sqlalchemy,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
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()
有更简单的方法吗?我想你在找。如果主键匹配,这将把处于分离状态的对象合并到会话中,否则将创建一个新的对象。因此,
session.save(new_obj)
将同时适用于插入和更新。这看起来像是或@Duffy的副本-这与我在python中实际需要区分插入和更新的问题不同,我不能在具有不可移植SQL扩展的数据库中执行。session.save()
在新版本的sqlalchemy中似乎不再存在了。我认为它不适用于mysql。我试过了,但没用。有人能证实这一点吗?我正在使用sqlalchemy 1.1.10