如何在OpenERP中获取PostgreSQL最后插入的ID

3 投票
4 回答
4210 浏览
提问于 2025-04-16 16:48

我有一个插入数据的查询,我想在OpenERP中获取最后插入的ID。这里是代码:

query = "INSERT INTO foo SELECT * FROM bar"
cr.execute(query) # cr => cursor

怎么才能获取最后插入的ID呢?如果没有插入任何数据会发生什么呢?

4 个回答

1

看到关于openerp标签的链接,我建议你使用openerp的orm。通过这个orm,调用创建方法时会返回新创建记录的ID。(这同样适用于你可能定义的任何osv_memory类)

参考链接: http://doc.openerp.com/v6.0/developer/2_5_Objects_Fields_Methods/methods.html#osv.osv.osv.create

示例:

new_id = self.pool.get('model.name').create(cr, uid, {'name': 'New Name'})
1

RETURNING 在版本 v8.2 及以上运行得很好。如果你使用的是更早的版本,那你可能需要用 currval() 来获取最后插入的值(详细信息可以查看这里的文档)。

7

看看这个RETURNING 子句

INSERT INTO table [ ( column [, ...] ) ]
    { DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }
    [ RETURNING * | output_expression [ AS output_name ] [, ...] ]

往 distributors 表里插入一行数据,同时返回由 DEFAULT 子句生成的序列号:

INSERT INTO distributors (did, dname) VALUES (DEFAULT, 'XYZ Widgets')
   RETURNING did;

撰写回答