Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用MySQLdb从Python更改SQL隔离级别?_Python_Mysql_Isolation Level_Python Db Api - Fatal编程技术网

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

如何使用MySQLdb从Python更改SQL隔离级别?,python,mysql,isolation-level,python-db-api,Python,Mysql,Isolation Level,Python Db Api,我在研究此问题时遇到的文档表明,对其他数据库执行此操作的方法是在查询中使用多个语句,即la: >>> cursor = connection.cursor() >>> cursor.execute("set session transaction isolation level read uncommitted; select stuff from table; set ses

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

>>> 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 cursor的execute()方法只能看到分号以下的第一个查询:

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

# output
(('bar',),)

使用
cur.executemany
运行多个sql语句;分开。

这正是我需要的。奇怪的是,我以为我以前试过,但很明显我的信号在什么地方被弄错了。谢谢你的帮助!对于MySQL 8.0,它应该是
cur.execute(“选择@@session.transaction\u隔离”)
cur.executemany("SELECT * FROM bar WHERE thing = 'bar'; SELECT * FROM bar")
print cur.fetchall()