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 に答える