Moje postgres'owy zapytanie brzmi:Jak uzyskać włożona lub wybranego wiersza id w PostgreSQL przy użyciu Pythona
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)
muszę dostać świeżo wstawiony id wartość statusu, jeśli nie robi istnieje, lub wybierz swój identyfikator, jeśli już istnieje. RETURNING id
zadusiło to zapytanie, więc musiałem je usunąć, aby przynajmniej zadziałało selektywne wstawianie.
Jakieś wskazówki, jak uzyskać tutaj statusId? W innym przypadku robię Upsert. (Wstaw, jeśli nie istnieje, zaktualizuj inaczej) Tutaj znowu potrzebuję wstawionego lub zaktualizowanego identyfikatora wiersza. (Nie, nie jestem przy użyciu procedur przechowywanych, jeśli to był twój pierwszy pytanie ...)
góry dzięki
Uderza mnie, że najszybszym sposobem na zrobienie tego jest prawdopodobnie wykonanie trzech zapytań (w razie potrzeby transakcji). 1) "SELECT id FROM staticable WHERE value = '% s'"% (status) 2) Jeśli nie zostały zwrócone żadne wiersze, "INSERT INTO staticable (value), '% s'"% (status). 3) "SELECT curval (pk_seq)" cokolwiek pk_seq jest wywoływane jako sekwencja dla twojego klucza głównego id. Ale ponieważ nie jest to tym, o co prosiłeś, nie jest to odpowiedź. –
dzięki za odpowiedź @ed. Infact 2 & 3 może zostać scalony przez 'INSERT INTO staticable (value), '% s' RETURNING id"% (status) 'ponieważ to również zwróci identyfikator, ale szukałem umieszczenia tego wszystkiego w jeden. – jerrymouse