Как изменить уровень изоляции SQL от Python с помощью MySQLdb?
документация, с которой я столкнулся, исследуя это, указывает, что способ сделать это для других баз данных-использовать несколько операторов в вашем запросе, a la:
>>> cursor = connection.cursor()
>>> cursor.execute("set session transaction isolation level read uncommitted;
select stuff from table;
set session transaction isolation level repeatable read;")
к сожалению, это не дает никаких результатов, так как, по-видимому, API Python DB (или, может быть, только эта его реализация?) не поддерживает несколько наборов записей в рамках одного запроса.
кто-нибудь имел успех с этим в прошлом?
1 ответов
Я не думаю, что это работает для драйвера 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',)
метод execute() курсора MySQLdb видит только первый запрос до точки с запятой:
cur.execute("SELECT * FROM bar WHERE thing = 'bar'; SELECT * FROM bar")
print cur.fetchall()
# output
(('bar',),)