有人知道SQLAlchemy中的SQL“INSERT OR REPLACE”子句及其SQL表达式语言的等价物吗?
非常感谢 - honzas
答案 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 REPLACE
和INSERT
之间放置INTO
的文档SQL语句中的{1}}为here