10

理想的には、次のようなことができるようにしたいと思います。

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がわからないためです...

ヘルプ!

4

2 に答える 2

22

確かに、コマンドが終了するとすぐにIDがわかります。これが、RETURNINGの実装方法です。ただし、実際にフェッチする必要があるため、次のようになります。

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

シナリオで機能するはずです。

于 2010-01-27T10:10:46.633 に答える
3

RETURNINGはPostgresql>=8.2で機能します

于 2010-03-24T19:22:39.843 に答える