如何在Python中使用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;")
不过,遗憾的是,这样做并没有得到任何结果,因为看起来Python的数据库API(或者说是这个特定的实现?)不支持在一个查询中返回多个记录集。
有没有人以前成功过这种做法呢?
2 个回答
0
cur.executemany("SELECT * FROM bar WHERE thing = 'bar'; SELECT * FROM bar")
print cur.fetchall()
使用 cur.executemany
可以一次性执行多个用分号(;)分开的 SQL 语句。
17
我觉得这个方法在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的游标(cursor)执行方法(execute())只会处理到第一个查询,也就是在分号(;)之前的部分:
cur.execute("SELECT * FROM bar WHERE thing = 'bar'; SELECT * FROM bar")
print cur.fetchall()
# output
(('bar',),)