13

有人知道 SQLAlchemy 及其 SQL 表达式语言中的 SQL“INSERT OR REPLACE”子句的等价物吗?

非常感谢 - honzas

4

4 回答 4

9

怎么样Session.merge

Session.merge(instance, load=True, **kw)

将实例的状态复制到具有相同标识符的持久实例上。

如果当前没有与会话关联的持久实例,它将被加载。返回持久实例。如果给定实例未保存,则保存副本并将其作为新的持久实例返回。给定的实例不会与会话关联。如果关联映射为 cascade="merge",则此操作级联到关联实例。

来自http://www.sqlalchemy.org/docs/reference/orm/sessions.html

于 2010-04-08T17:58:19.457 回答
6
Session.save_or_update(model)
于 2009-04-02T08:11:02.127 回答
5

我不认为(如果我错了,请纠正我)INSERT OR REPLACE 在任何 SQL 标准中;这是一个特定于 SQLite 的东西。有 MERGE,但也不是所有方言都支持。所以它在 SQLAlchemy 的通用方言中是不可用的。

正如 M. Utku 所建议的,最干净的解决方案是使用 Session。您也可以使用 SAVEPOINTs 保存,尝试:插入,除了 IntegrityError: 然后回滚并执行更新。第三种解决方案是使用 OUTER JOIN 和 WHERE 子句编写您的 INSERT,该子句过滤具有空值的行。

于 2009-04-02T12:10:45.623 回答
1

你可以在你的 SQLAlchemy中使用OR REPLACE所谓的——关于如何在你的 SQL 语句之间和中放置的文档是hereprefixInsertOR REPLACEINSERTINTO

于 2011-04-21T14:35:43.337 回答