2009-04-01 5 views
15

मैं निम्नलिखित क्षेत्रों के साथ mysql में एक साधारण तालिका है:पाइथन में MySQLdb का उपयोग करके mysql के साथ सम्मिलित करने के बाद आप पंक्ति आईडी को सुरक्षित और कुशलतापूर्वक कैसे प्राप्त करते हैं?

  • आईडी - प्राथमिक कुंजी, पूर्णांक, autoincrement
  • नाम - varchar (50)
  • विवरण - varchar (256)

MySQLdb, एक पायथन मॉड्यूल का उपयोग करके, मैं तालिका में एक नाम और विवरण डालना चाहता हूं, और आईडी वापस प्राप्त करना चाहता हूं।

स्यूडोकोड में:

db = MySQLdb.connection(...) 
queryString = "INSERT into tablename (name, description) VALUES" % (a_name, a_desc);" 

db.execute(queryString); 
newID = ??? 
+0

की डुप्लीकेट [मैं कैसे पंक्ति मैं pymysql में डाला के लिए पहचान/AutoNumber मूल्य मिलता है] (http://stackoverflow.com/questions/6802061/ कर सकता है कैसे-करें-मैं-पहचान-autonumber-value-the-row-i-inserted-in-pymysql), जो एक बेहतर क्यू एंड ए जोड़ी है; इस के पास एक गलत जवाब है जो नीचे दिए गए सही उत्तर के साथ स्वीकार किया गया है, जो अजीब और अनुपयोगी है। –

उत्तर

27

मुझे लगता है कि यह हो सकता है

newID = db.insert_id() 

मूल पोस्टर द्वारा संपादित

, बाहर कर देता है MySQLdb के संस्करण है कि मैं कर रहा हूँ में (1.2.2) का उपयोग करके आप निम्न कार्य करेंगे:

conn = MySQLdb(host...) 

c = conn.cursor() 
c.execute("INSERT INTO...") 
newID = c.lastrowid 

मैं इसे सही उत्तर के रूप में छोड़ रहा हूं, क्योंकि यह मुझे सही दिशा में इंगित करता है।

+0

यदि आप स्वचालित रूप से काम नहीं कर रहे हैं, तो * प्रतिबद्ध * से पहले ऐसा करें। – kmarsh

+0

@kmarsh मुझे पता है कि यह टिप्पणी बहुत पुरानी है, लेकिन क्या आपको याद है कि यह प्रतिबद्धता से पहले क्यों होना चाहिए? –

+0

मुझे लगता है क्योंकि कोड कर्सर के साथ किया जाता है, और प्रतिबद्धता के बाद संदर्भ खो देंगे। छोटा जवाब, यह मेरे लिए इस तरह से बेहतर काम किया। – kmarsh

-7

सभी का सबसे आसान तरीका एक संग्रहित प्रक्रिया में एक चयन गिनती क्वेरी के साथ अपनी डालने को लपेटना है और उसे अपने कोड में कॉल करना है। आप संग्रहीत प्रक्रिया में आवश्यक पैरामीटर में गुजरेंगे और फिर यह आपकी पंक्ति गणना का चयन करेगा।

+1

-1 अंतर्निहित के लिए "सबसे आसान तरीका" – epochwolf

+1

-1 का उपयोग न करने के लिए और तथ्य यह है कि आपने नाव को याद किया था। – Eloff

+2

-1 के साथ सभी को उपसर्ग करने के लिए बिल्टिन MySQL कार्यक्षमता – Justin

2

मैं इस के लिए एक MySQLdb विशिष्ट API हो, तो पता नहीं है, लेकिन सामान्य रूप में आप, SELECTing LAST_INSERT_ID()

यह एक प्रति-कनेक्शन के आधार पर है द्वारा पिछले डाला आईडी प्राप्त कर सकते हैं ताकि आप दौड़ का जोखिम नहीं है हालात यदि कुछ अन्य ग्राहक भी एक सम्मिलित करता है।

0

तुम भी एक

conn.insert_id

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

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