我在研究此文档时遇到的文档表明,对其他数据库执行此操作的方法是在查询中使用多个语句,例如:
>>> 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(或者可能只是这种实现?)在单个查询中不支持多个记录集。
过去有人在此方面取得过成功吗?
我认为这不适用于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',),)