मेरे postgres क्वेरी का उपयोग postgres में पंक्ति आईडी को चुना गया:सम्मिलित किए गए करने के लिए कैसे या अजगर
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)
मैं अगर यह मौजूद नहीं करता है हाल में डाला स्थिति मान आईडी मिलता है, या उसके आईडी चयन करने के लिए करता है, तो पहले से ही मौजूद जरूरत है। RETURNING id
ने इस क्वेरी को पूरी तरह से दबाया है इसलिए मुझे इसे चुनिंदा प्रविष्टि काम करने के लिए कम से कम इसे हटा देना पड़ा।
कोई संकेत कैसे स्थिति प्राप्त करने के लिए यहां आईडी? एक और उदाहरण में मैं एक अप्सर्ट कर रहा हूं। (अगर मौजूद नहीं है, तो अन्यथा अपडेट करें) यहां फिर से, मुझे डाली गई या अपडेट की गई पंक्ति आईडी की आवश्यकता है। (नहीं, मैं संग्रहित प्रक्रियाओं का उपयोग कर रहा है, कि यदि आपका पहला सवाल था ...)
अग्रिम
यह मुझे मारता है कि ऐसा करने का सबसे तेज़ तरीका शायद तीन प्रश्न (लेनदेन के भीतर, यदि आवश्यक हो) करना है। 1) "स्थाई कहां से मूल्य आईडी = '% s'"% (स्थिति) 2) यदि कोई पंक्ति वापस नहीं आती है, "स्थाई (मान), '% s'"% (स्थिति) में शामिल करें। 3) "चयन वक्र (pk_seq)" जो भी pk_seq को आपकी प्राथमिक कुंजी आईडी के अनुक्रम के रूप में कहा जाता है। लेकिन चूंकि यह आपने नहीं पूछा है, यह जवाब में नहीं है। उत्तर @ed के लिए –
धन्यवाद। वास्तव में 2 और 3 को स्थिर (मूल्य), '% s' वापसी आईडी "स्थिति (स्थिति) में 'INSERT द्वारा विलय किया जा सकता है क्योंकि यह आईडी भी वापस कर देगा। लेकिन मैं इसे सब एक में डाल रहा था। – jerrymouse