2011-04-15 12 views
6

इस शोध पर मैंने जो प्रलेखन चलाया है, वह इंगित करता है कि अन्य डेटाबेस के लिए इसे करने का तरीका आपकी क्वेरी में एकाधिक कथन का उपयोग करना है, एक ला:MySQLdb का उपयोग कर पाइथन से SQL अलगाव स्तर को आप कैसे बदलते हैं?

>>> cursor = connection.cursor() 
>>> cursor.execute("set session transaction isolation level read uncommitted; 
        select stuff from table; 
        set session transaction isolation level repeatable read;") 

दुर्भाग्यवश, ऐसा करने से कोई परिणाम नहीं मिलता है, जाहिर है पायथन डीबी एपीआई (या शायद इसका यह कार्यान्वयन?) एक ही क्वेरी के भीतर एकाधिक रिकॉर्डसेट का समर्थन नहीं करता है।

क्या किसी और के पास अतीत में सफलता मिली है?

उत्तर

9

मुझे नहीं लगता कि यह MySQLdb ड्राइवर के लिए काम करता है; आप अलग-अलग क्वेरी जारी करने के लिए होगा:

cur.execute("SELECT * FROM bar WHERE thing = 'bar'; SELECT * FROM bar") 
print cur.fetchall() 

# output 
(('bar',),) 
+0

है कि मैं वास्तव में क्या जरूरत:

cur = conn.cursor() cur.execute("SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED") cur.execute("SELECT @@session.tx_isolation") print cur.fetchall()[0] cur.execute("SELECT * FROM bar") print cur.fetchall() cur.execute("SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ") cur.execute("SELECT @@session.tx_isolation") print cur.fetchall()[0] # output ('READ-UNCOMMITTED',) (('foo',), ('bar',)) ('REPEATABLE-READ',) 

MySQLdb कर्सर के अमल() विधि केवल अर्धविराम करने के लिए पहले क्वेरी ऊपर देखता है। अजीब, मैंने सोचा कि मैंने पहले कोशिश की थी, लेकिन स्पष्ट रूप से मुझे कहीं और मेरे सिग्नल पार हो गए। आपकी सहायताके लिए धन्यवाद! – jodonnell

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