postgres tôi truy vấn là:Làm thế nào để có được chèn hoặc chọn id hàng trong postgres sử dụng 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)
tôi cần phải nhận được tươi chèn id giá trị tình trạng nếu nó không tồn tại, hoặc chọn id của nó nếu đã tồn tại. RETURNING id
choked truy vấn này hoàn toàn vì vậy tôi đã phải loại bỏ nó để atleast có được chèn chọn lọc làm việc.
Bất kỳ manh mối nào về cách nhận trạng thái ở đây? Trong trường hợp khác tôi đang làm một Upsert. (Chèn nếu không tồn tại, cập nhật khác) Ở đây một lần nữa, tôi cần id hàng chèn vào hoặc cập nhật. (Không, tôi không sử dụng thủ tục lưu trữ, nếu đó là câu hỏi đầu tiên của bạn ...)
Cảm ơn trước
Nó đánh tôi rằng cách nhanh nhất để làm điều này có lẽ là làm ba truy vấn (trong một giao dịch, nếu cần). 1) "SELECT id FROM statustable WHERE value = '% s'"% (status) 2) Nếu không có hàng nào trả về, "INSERT INTO statustable (value), '% s'"% (status). 3) "SELECT curval (pk_seq)" bất kỳ pk_seq nào được gọi là chuỗi cho id khóa chính của bạn. Nhưng vì đây không phải là những gì bạn yêu cầu, nó không phải là một câu trả lời. –
cảm ơn bạn đã trả lời @ed. Infact 2 & 3 có thể được hợp nhất bởi 'INSERT INTO statustable (value) ',% s' RETURNING id"% (status) 'vì điều này cũng sẽ trả về id. Nhưng tôi đang tìm cách đặt tất cả thành một. – jerrymouse