10

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

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

过去有没有其他人在这方面取得过成功?

4

2 回答 2

16

我认为这不适用于 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',),)
于 2011-04-16T02:11:01.483 回答
0
cur.executemany("SELECT * FROM bar WHERE thing = 'bar'; SELECT * FROM bar")
print cur.fetchall()

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

于 2020-12-08T00:19:53.617 回答