2011-04-15 17 views
6

Bu araştırma genelinde koşuyoruz belgeler a la, diğer veritabanları için bunu yapmak yolu sorgusunda birden ifadeleri kullanmak olduğunu gösterir: MaalesefMySQLdb kullanarak Python'dan SQL yalıtım düzeyini nasıl değiştirirsiniz?

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

, bu sonuç getirmeyen yapıyor, hem görünüşte Python DB API'sı (veya belki sadece bu uygulaması?) tek bir sorguda birden çok kayıt kümesini desteklemez.

Geçmişte bununla bir başkası başarılı oldu mu?

cevap

9

Bunun MySQLdb sürücüsü için çalıştığını sanmıyorum; Ayrı sorgular gerekecek: tam olarak ne gerekli olduğunu

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 imlecin yürütmek() yöntemi yalnızca noktalı virgül ilk sorgu up görür. Garip, bunu daha önce denediğimi sandım, ama görünüşe göre sinyallerimi bir yerden geçtim. Yardım ettiğin için teşekkür ederim! – jodonnell