save_or_update
已在0.6中删除。是否有替代品可以在0.6及以上使用它们?
我注意到会话对象存在方法_save_or_update_state
,但此方法没有文档。
答案 0 :(得分:2)
Michael Bayer answered this question :
update(),save_or_update(),save()都是 全部弃用。 add()放置一个 在所有情况下会话中的对象, 使用持久性信息 已经与对象相关联 确定INSERT或UPDATE。这个 意味着你是否只是做一个新的 Foo(id = some id),那是瞬态的 - SQLAlchemy没有加载它。这将是 插入
请记住 Session维护着身份图 所有唯一的主键已经 加载到内存,以及 收到的国家 数据库。出于这个原因,你 一般不能只是放一个对象 会话中有一些任意数据, 并期望它“取而代之” 要加载的实际行 交易。 SQLAlchemy不会 知道怎么做因为它有 不知道有什么变化 与已经存在的这一行相比 当下。
如果你想创建一个 新的Foo(),主键可能 或者可能不存在 数据库,要合并状态 该对象的一个是 会议制作。使用 session.merge()用于此用例 这将加载现有对象 从当前交易中,如果有的话, 并合并你的外部状态 与它对象,返回 实例。传递给它的实例 保持不变,在外面 会话。
答案 1 :(得分:1)
Session.merge()
适用于新对象和现有对象。但你必须记住,merge()
返回绑定到会话的对象而不是add()
(旧版本中的save_or_update()
),它将对象作为参数传递进入会议。需要此行为以确保会话中的每个标识都有一个对象。
答案 2 :(得分:0)
session.merge()
将不起作用,您通常希望从从设备进行查询,但写入主设备。我有这样的设置,最后在写入之前从主设备重新查询,然后使用session.add()
如果主设备上确实没有数据。