我基本上需要做一个INSERT ... ON DUPLICATE KEY UPDATE
但是该行已经存在 99.9...% 的时间。因此,我真正想做的是一个UPDATE
, 捕获奇怪的异常和INSERT
.
在 sqlalchemy 中,我通常会执行以下操作:
new_obj = MyModel(the_pk=id)
new_obj = MyModel.__table__.c.some_val + val
session.merge(new_obj)
我注意到,当我调用session.merge
sqlalchemy 时会执行 a SELECT
,在我知道我几乎总是在UPDATE
'ing 的情况下,这是低效的。除了编写原始 SQL(我很满意)之外,有什么方法可以改进这个问题吗?我只是想知道我是否缺少一些 sqlalchemy 技巧。
此外,在进行合并之后,如果在刷新/提交会话之前存在具有冲突 PK 的行会发生什么?我假设选择是确定 sqlalchemy 是否需要稍后执行INSERT
或UPDATE