【问题标题】:Returning a value with psycopg2使用 psycopg2 返回一个值
【发布时间】:2011-01-09 17:54:01
【问题描述】:

理想情况下,我希望能够执行以下操作:

id_of_new_row = cursor.lastrowid()

我在其中获取新创建或修改的行的 id。但这不能通过 psycopg2 获得。或者,我试过这个:

id_of_new_row = cursor.execute('INSERT INTO this_table (value1, value2, value3) VALUES (%s, %s, %s) RETURNING id', (some_value1, some_value2, some_value3))

这不起作用,可能是因为在提交之前它不会知道 id...

救命!

【问题讨论】:

  • 您要获取什么样的 ID - OID 或声明为 SERIAL 的字段的值?
  • 我不知道。我是新来的。这是一个django项目,django根据我的模型用syncdb搭建postgres数据库。我不确定 django 是否在表创建期间自动声明 OID。除非另有说明,否则我需要每一行的主键,它由 django 自动生成为“id”。我会做一些阅读。

标签: django postgresql psycopg2


【解决方案1】:

当然会,只要命令完成它就会知道 ID,这就是 RETURNING 的实现方式。不过,您需要实际获取它,例如:

cursor.execute("INSERT INTO .... RETURNING id")
id_of_new_row = cursor.fetchone()[0]

应该在你的场景中工作。

【讨论】:

  • 是索引从执行查询结果中获取值的唯一方法。三是获得价值的任何方式吗?像 row.id ?
【解决方案2】:

RETURNING 适用于 Postgresql >= 8.2

【讨论】:

    猜你喜欢
    • 2016-07-24
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 2011-04-18
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    相关资源
    最近更新 更多