SQLAlchemy - INSERT OR REPLACE等效项

时间:2009-04-02 08:05:37

标签: python sqlalchemy

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

非常感谢 - honzas

4 个答案:

答案 0 :(得分:9)

Session.merge怎么样?

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

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

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

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

答案 1 :(得分:6)

Session.save_or_update(model)

答案 2 :(得分:4)

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

最干净的解决方案是按照M. Utku的建议使用Session。您还可以使用SAVEPOINT来保存,尝试:插入,但IntegrityError除外:然后回滚并执行更新。第三种解决方案是使用OUTER JOIN和WHERE子句编写INSERT,该子句对具有空值的行进行过滤。

答案 3 :(得分:1)

您可以在SQLAlchemy OR REPLACE中使用prefix作为所谓的Insert - 有关如何在OR REPLACEINSERT之间放置INTO的文档SQL语句中的{1}}为here