San*_*rea 5 python postgresql sqlalchemy
我正在阅读有关 postgres 方言上的 upsert 操作的 SqlAlchemy 文档,网址为http://docs.sqlalchemy.org/en/latest/dialects/postgresql.html#insert-on-conflict-upsert
有没有办法知道更新插入是插入还是更新?
该文档似乎省略了这个细节。
只需添加最后一个RETURNING子句:
...
RETURNING (tbl.xmax = 0) AS inserted
Run Code Online (Sandbox Code Playgroud)
返回true插入的行和false更新的行。不过,这依赖于未记录的实现细节。详细解释请参见:
添加 OID(如另一个答案中建议的那样)会增加成本,使表膨胀并烧毁 OID(如果您的表不是很小)。这就是为什么一般设置default_with_oids已更改为off很久以前(Postgres 8.1)。Postgres 11 的手册:
在用户表中使用 OID 已被视为已弃用,因此大多数安装应禁用此变量。需要特定表的 OID 的应用程序应
WITH OIDS在创建表时指定。
后来的版本甚至完全删除了该设置default_with_oids。
| 归档时间: |
|
| 查看次数: |
5139 次 |
| 最近记录: |