2010-01-26 8 views
9
Rückkehr

Im Idealfall würde Ich mag, wie etwas zu tun in der Lage:Wert mit psycopg2

id_of_new_row = cursor.lastrowid() 

, in dem ich die ID des neu erstellten oder geänderten Reihe bekommen. Aber das ist nicht über psycopg2 verfügbar. Alternativ habe ich das versucht:

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

, die nicht, wahrscheinlich nicht funktioniert, weil es nicht die ID wissen, bis nach dem Commit gemacht wird ...

Hilfe!

+0

Welche Art von ID Sie zu bekommen versuchen - OID oder der Wert eines Feldes SERIEN erklärt? –

+0

Ich weiß es nicht. Ich bin neu. Dies ist ein Django-Projekt, und Django richtet die Postgres-Datenbank mit Syncdb basierend auf meinen Modellen ein. Ich bin mir nicht sicher, ob Django OID während der Tabellenerstellung automatisch deklariert. Ich brauche den Primärschlüssel jeder Zeile, der von django automatisch als "id" generiert wird, sofern nicht anders angegeben. Ich werde etwas lesen. –

Antwort

19

Sicher wird es, es wird die ID kennen, sobald der Befehl beendet ist, so ist RETURNING implementiert. Sie müssen es tatsächlich holen, aber so etwas wie:

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

sollte in Ihrem Szenario funktionieren.

+0

Erstaunlich. Vielen Dank! –

+0

ist Index die einzige Möglichkeit zum Abrufen von Werten aus dem Ergebnis der Ausführungsabfrage. Gibt es drei Möglichkeiten, Wert zu schaffen? wie row.id? –

3

RÜCKKEHR Arbeiten auf Postgresql> = 8,2