如何使用 OpenERP 在 Postgresql 中获取最后插入的 id
我有一个插入查询,我想获取 OpenERP 中最后插入的 id。代码如下:
query = "INSERT INTO foo SELECT * FROM bar"
cr.execute(query) # cr => cursor
如何获取最后插入的 id(s)?当插入为空时发生了什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
查看 RETURNING 子句。
Look at the RETURNING clause.
如果您运行的是 v8.2+,
RETURNING
效果很好。否则,您可能会考虑使用currval()
(此处为文档)。RETURNING
works great if you're running v8.2+. Otherwise you'll probably be looking at usingcurrval()
(doc here).看到 openerp 标签的链接,我不得不建议您使用 openerp orm。对于调用create方法的orm将返回新创建记录的id。 (它也适用于您可能定义的任何 osv_memory 类)
参考: http://doc.openerp.com/v6.0/developer/2_5_Objects_Fields_Methods/methods.html#osv.osv.osv.create
示例:
Seeing the link to openerp tag, I'd have to advise you to use the openerp orm. For the orm calling the create method will return the id of the newly created record. (It also then works for any osv_memory classes you may have defined)
Reference: http://doc.openerp.com/v6.0/developer/2_5_Objects_Fields_Methods/methods.html#osv.osv.osv.create
Example:
看起来像Sentinel的建议 PostgreSQL RETURNING 子句 是最容易使用的。
您可能还对 OpenERP 的 ORM 类如何管理新记录的 id 值感兴趣。这是 的片段
orm.create()
方法:它使用每个表的序列来生成新的 id 值。序列的名称默认为表名称加“_id_seq”,如您在
orm.__init__()
方法。我不知道您想要完成什么,但您可能会发现使用
orm
类 为您创建记录并让它处理详细信息。例如,创建方法 返回新记录的 id 值。It looks like Sentinel's suggestion of the PostgreSQL RETURNING clause is the easiest thing for you to use.
You might also be interested in how OpenERP's ORM class manages id values for new records. Here's a snippet from the
orm.create()
method:It uses a sequence for each table to generate the new id value. The name of the sequence defaults to the name of the table plus '_id_seq', as you can see in the
orm.__init__()
method.I don't know what you're trying to accomplish, but you might find it easier to use the
orm
class to create the record for you and let it take care of the details. For example, the create method returns the id value of the new record.