2010-01-26 6 views
9

Idealmente me gustaría ser capaz de hacer algo como:con un valor psycopg2

id_of_new_row = cursor.lastrowid() 

en el que tengo la id de la fila recién creado o modificado. Pero esto no está disponible a través de psycopg2. Por otra parte, he intentado esto:

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)) 

que no funciona, probablemente debido a que no se conoce la identificación hasta después de la confirmación se hace ...

Ayuda!

+0

¿Qué tipo de identificación que usted está tratando de conseguir - OID o el valor de un campo declarado en serie? –

+0

No lo sé. Soy nuevo. Este es un proyecto django, y django configura la base de datos postgres con syncdb en base a mis modelos. No estoy seguro si django declara OID durante la creación de tabla automáticamente. Necesito la clave principal de cada fila, que se genera automáticamente como "id" por django, a menos que se especifique lo contrario. Haré un poco de lectura. –

Respuesta

19

Claro que lo hará, sabrá la identificación tan pronto como el comando termine, así es como se implementa RETURNING. Sin embargo, necesita recuperarlo, así que algo como:

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

debería funcionar en su situación.

+0

Increíble. ¡Gracias! –

+0

indexa la única forma de obtener valores del resultado de la ejecución de la consulta. ¿Hay tres formas de obtener valor? como row.id? –

3

obras Vuelta el PostgreSQL> = 8.2

Cuestiones relacionadas