有人知道 SQLAlchemy 及其 SQL 表达式语言中的 SQL“INSERT OR REPLACE”子句的等价物吗?
非常感谢 - honzas
怎么样Session.merge
?
Session.merge(instance, load=True, **kw)
将实例的状态复制到具有相同标识符的持久实例上。
如果当前没有与会话关联的持久实例,它将被加载。返回持久实例。如果给定实例未保存,则保存副本并将其作为新的持久实例返回。给定的实例不会与会话关联。如果关联映射为 cascade="merge",则此操作级联到关联实例。
来自http://www.sqlalchemy.org/docs/reference/orm/sessions.html
Session.save_or_update(model)
我不认为(如果我错了,请纠正我)INSERT OR REPLACE 在任何 SQL 标准中;这是一个特定于 SQLite 的东西。有 MERGE,但也不是所有方言都支持。所以它在 SQLAlchemy 的通用方言中是不可用的。
正如 M. Utku 所建议的,最干净的解决方案是使用 Session。您也可以使用 SAVEPOINTs 保存,尝试:插入,除了 IntegrityError: 然后回滚并执行更新。第三种解决方案是使用 OUTER JOIN 和 WHERE 子句编写您的 INSERT,该子句过滤具有空值的行。
你可以在你的 SQLAlchemy中使用OR REPLACE
所谓的——关于如何在你的 SQL 语句之间和中放置的文档是hereprefix
Insert
OR REPLACE
INSERT
INTO