Идеально я хотел бы смочь сделать что-то как:
id_of_new_row = cursor.lastrowid()
в котором я получаю идентификатор недавно созданной или измененной строки. Но это не доступно через 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))
который не работает, вероятно, потому что это не будет знать идентификатор, пока фиксация не будет сделана...
На помощь!
Это конвенция в C # -Compiler. Как будто он говорит на MSDN-странице на «Использование атрибутов» :
по соглашению, все имена атрибутов со словом «атрибут» отличить их от других предметов в .NET Framework. Тем не менее, вы делаете не нужно указывать атрибут Суффикс при использовании атрибутов в коде. Например, [DLLLIMPORT ] эквивалентно к [DLLLIMPORTATTRIBUTE] , но DLLIMPORTATTRIBUTE - это атрибут Фактическое имя в .NET Framework.
Это работает так же в VB.Net .
-121--2151612-Конечно, он будет знать идентификатор, как только команда завершится, вот как возвращается. Вам нужно на самом деле сделать это, хотя, так что-то вроде:
cursor.execute("INSERT INTO .... RETURNING id")
id_of_new_row = cursor.fetchone()[0]
должно работать в вашем сценарии.