2011-04-15 23 views
6

我整個研究這個運行的文件表明,這樣做對其他數據庫的方法是使用多條語句在查詢中,一拉:如何使用MySQLdb從Python更改SQL隔離級別?

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

不幸的是,這樣做產生任何結果,因爲很明顯Python DB API(或者可能只是它的這種實現?)不支持單個查詢中的多個記錄集。

過去有沒有其他人對此有過成功?

回答

9

我不認爲這適用於MySQLdb驅動程序;你必須發出單獨的查詢:

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的遊標的execute()方法只能看到第一個查詢到分號:

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

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

這正是我需要的。奇怪的是,我以前曾經嘗試過,但顯然我的信號已經在某處傳播了。謝謝你的幫助! – jodonnell 2011-04-16 18:31:33