如何在OpenERP中获取PostgreSQL最后插入的ID
我有一个插入数据的查询,我想在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;