如何使用MySQLdb从Python更改SQL隔离级别?

发布于 2021-01-29 14:58:20

我在研究此文档时遇到的文档表明,对其他数据库执行此操作的方法是在查询中使用多个语句,例如:

>>> 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(或者可能只是这种实现?)在单个查询中不支持多个记录集。

过去有人在此方面取得过成功吗?

关注者
0
被浏览
54
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我认为这不适用于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',),)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看