La mia domanda Postgres è:Come ottenere inserito o selezionato di fila id in Postgres usando python
query = """INSERT INTO statustable(value) SELECT '%s'
WHERE NOT EXISTS (SELECT id, value FROM statustable
WHERE value = '%s') RETURNING id""" % (status, status)
cursor_postgres.execute(query)
conn_postgres.commit()
statusId = cursor_postgres.fetchone()[0]
print "statusId" + str(statusId)
ho bisogno di ottenere il valore di stato di recente inserito id se doesnt esiste, oppure selezionare il relativo ID se già esiste. RETURNING id
ha soffocato questa query interamente, quindi ho dovuto rimuoverlo per fare in modo che l'inserimento selettivo funzioni.
Eventuali indizi su come ottenere lo stato ID qui? In un altro caso sto facendo un Upsert. (Inserisci se non esiste, aggiorna altrimenti) Anche in questo caso, ho bisogno dell'ID di riga inserito o aggiornato. (No, non sto usando stored procedure, se quella fosse la vostra prima domanda ...)
Grazie in anticipo
Mi sembra che il modo più rapido per eseguire questa operazione sia probabilmente eseguire tre query (all'interno di una transazione, se necessario). 1) "SELECT id FROM statustable WHERE value = '% s'"% (status) 2) Se non viene restituita alcuna riga, "INSERT INTO statustable (valore), '% s'"% (stato). 3) "SELECT curval (pk_seq)" qualunque sia il nome di pk_seq come sequenza per l'id della chiave primaria. Ma poiché questo non è quello che hai chiesto, non è in una risposta. –
grazie per la risposta @ed. Infact 2 e 3 possono essere uniti da 'INSERT INTO statustable (valore), '% s' RETURNING id"% (status) 'in quanto ciò restituirà anche l'id. Ma stavo cercando di mettere tutto in uno. – jerrymouse