2009-06-22 21 views
13

विफल रहता है। मैंने यहां एक mysql क्वेरी ब्राउज़र बनाया है, जैसे नेविचैट। प्रश्नों को करने के लिए MySQLdb का उपयोग करना।पायथन MySQLdb अद्यतन क्वेरी

यहां अजीब हिस्सा है। जब मैं प्रोग्राम के माध्यम से क्वेरी चलाता हूं (MySQLdb का उपयोग करके), यह मुझे सफलता, प्रभावित पंक्तियों = 1 देता है, लेकिन जब मैं इसे phpmyadmin में देखता हूं, तो मान नहीं बदला जाता है।

इसलिए मैं क्वेरी करने से पहले, मैं इसे प्रिंट करता हूं, कॉपी करता हूं और phpmyadmin की क्वेरी विंडो में पेस्ट करता हूं, हिट करता हूं और यह काम करता है। इतनी लंबी कहानी छोटी है, अद्यतन क्वेरी काम नहीं कर रही है, लेकिन जब मैं phpmyadmin में कॉपी और पेस्ट करता हूं, तो यह काम करता है।

self.tbl.sql.use(self.tbl.database)  # switches to correct database. I've printed this and it uses the corrected db 
if self.tbl.sql.execute(query) == True: 
    print sql_obj.rows_affected()   # returns 1 (since i only do 1 query) 

और यहाँ एसक्यूएल वर्ग

def execute(self, query): 

    try: 
     self.cursor.execute(query) 
     return True 
    except MySQLdb.ProgrammingError as error: 
     print "---->SQL Error: %s" % error 
     return False 
    except MySQLdb.IntegrityError as e: 
     print "--->SQL Error: %s" % e  
     return False 

तो किसी भी विचार क्या हो रहा हो सकता का हिस्सा है?

+2

इस के लिए धन्यवाद मैं सही प्रश्न का – KacieHouser

उत्तर

16

बस एक अनुमान: शायद पाइथन में कोड लेनदेन के भीतर चल रहा है, और लेनदेन को स्पष्ट रूप से प्रतिबद्ध करने की आवश्यकता हो सकती है?

संपादित करें: entry in the MySQLdb FAQ है जो प्रासंगिक हो सकता है।

+2

+1 था: नहीं प्रतिबद्ध मतलब है परिवर्तन हर किसी के लिए अदृश्य है। –

+0

हाँ। यही था वह। बहुत धन्यवाद! – sqram

19

मेरा मानना ​​है कि @ जेसन क्रिएटॉन और @ एसएलॉट सही हैं।

कम से कम यदि आप जिस तालिका को अपडेट कर रहे हैं वह एक लेनदेन स्टोरेज इंजन पर है। InnoDB लेनदेन है, ISAM नहीं है।

आपको इसे बंद करने से पहले अपने कनेक्शन ऑब्जेक्ट पर commit() पर कॉल करना होगा, या आपको कनेक्शन को ऑटोकॉमिट मोड में सेट करना होगा। मुझे यकीन नहीं है कि आप MySQLdb कनेक्शन के लिए ऐसा कैसे करते हैं, मुझे लगता है कि आप या तो कनेक्शन कन्स्ट्रक्टर को एक तर्क सेट करते हैं, या कनेक्शन ऑब्जेक्ट बनाने के बाद एक प्रॉपर्टी सेट करते हैं।

कुछ की तरह:

conn = mysql.connection(host, port, autocommit=True) 

# or 
conn = mysql.connection(host, port) 
conn.autocommit(True) 
+0

आह मैं देखता हूं। हाँ यह समस्या थी। यद्यपि आपने उत्तर के उत्तर को सीधे आगे पोस्ट किया है, लेकिन मुझे जेसन के स्वीकार्य के रूप में चिह्नित करना होगा, जैसा कि उसने पहले समाधान दिया था, समाधान के लिंक के साथ। बहुत बहुत धन्यवाद, मैं इसे 1+ दे दूंगा! :) – sqram

+2

हाँ! आपका दूसरा अनुमान सही है - conn.autocommit (True) काम करता है (हालांकि स्पष्ट काम अभी भी बेहतर है ;-)। –

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