理想情况下,我希望能够做到这样的事情:
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 ...
帮助!
答案 0 :(得分:18)
当然,它会在命令完成后立即知道ID,这就是RETURNING的实现方式。你需要实际获取它,所以像:
cursor.execute("INSERT INTO .... RETURNING id")
id_of_new_row = cursor.fetchone()[0]
应该适用于您的场景。
答案 1 :(得分:3)
RETURNING适用于Postgresql> = 8.2