2010-01-26 12 views
9
साथ एक मूल्य के रिटर्निंग

आदर्श रूप में मैं की तरह कुछ करने में सक्षम होना चाहते हैं:psycopg2

id_of_new_row = cursor.lastrowid() 

जिसमें मैं नव निर्मित या संशोधित पंक्ति के आईडी मिलता है। लेकिन यह psycopg2 के माध्यम से उपलब्ध नहीं है। वैकल्पिक रूप से, मैं इस कोशिश की है:

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

जो काम नहीं करता है, शायद इसलिए कि यह आईडी जब तक के बाद प्रतिबद्ध किया जाता है ...

सहायता पता नहीं चलेगा!

+0

आईडी आप किस तरह प्राप्त करने के लिए कोशिश कर रहे हैं - OID या एक फ़ील्ड का मान धारावाहिक घोषित? –

+0

मुझे नहीं पता। मैं नया हूँ। यह एक django प्रोजेक्ट है, और django मेरे मॉडल के आधार पर syncgb के साथ postgres डेटाबेस सेट अप करता है। मुझे यकीन नहीं है कि django स्वचालित रूप से तालिका निर्माण के दौरान ओआईडी घोषित करता है। मुझे प्रत्येक पंक्ति की प्राथमिक कुंजी की आवश्यकता है, जो डीजेंगो द्वारा "आईडी" के रूप में स्वत: जेनरेट की जाती है, जब तक कि अन्यथा निर्दिष्ट न किया जाए। मैं कुछ पढ़ूंगा। –

उत्तर

19

निश्चित रूप से यह होगा, जैसे ही आदेश समाप्त होता है, आईडी को पता चल जाएगा, इस तरह रिटर्निंग लागू किया जाता है। आपको वास्तव में इसे लाने की आवश्यकता है, इसलिए कुछ ऐसा है:

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

आपके परिदृश्य में काम करना चाहिए। Postgresql पर

+0

कमाल। धन्यवाद! –

+0

इंडेक्स निष्पादित क्वेरी परिणाम से मान लाने का एकमात्र तरीका है। मूल्य पाने के लिए तीन तरह का कोई तरीका है? row.id की तरह? –

3

लौटने काम करता है> = 8.2

संबंधित मुद्दे