Как указать уровень изоляции транзакций для бэкэнда MS SQL в Sql Alchemy Python

Как установить уровень транзакции READ UNCOMMITED для всех запросов, выполняемых через объект механизма SQL Alchemy?

Я установил аргумент isolation_level, как указано здесь: http://docs.sqlalchemy.org/en/latest/core/engines.html#sqlalchemy.create_engine.params.isolation_level, передав его в create_engine следующим образом:

my_eng = create_engine(db_conn_string, isolation_level='READ_UNCOMMITTED')

но для моего бэкэнда (MS SQL Server) я получаю следующую ошибку, что, возможно, неудивительно, поскольку в документах говорится, что это зависит от диалекта. Я просто удивлен, что нет документации по уровням изоляции в MS SQL!

TypeError: Invalid argument(s) 'isolation_level' sent to create_engine(), 
using configuration MSDialect_pyodbc/QueuePool/Engine.  Please check that 
the keyword arguments are appropriate for this combination of components.

Кроме того, я не вижу ничего полезного в документации по диалектам здесь:

http://docs.sqlalchemy.org/en/relREAD UNCOMMITED0/dialects /mssql.html#dsn-соединения


person michael g    schedule 08.03.2016    source источник
comment
Не зря, но не могли бы вы обновить свой пост, указав, как вы звоните create_engine()?   -  person Ben Thul    schedule 09.03.2016
comment
хорошая мысль, Бен, обновлено.   -  person michael g    schedule 09.03.2016


Ответы (2)


Это доступно только в бета-версии (предварительной) версии SQL Alchemy (в настоящее время 1.1.0b2). В противном случае текущая версия (1.0.14) не имеет этой функции. Если вы действительно хотите использовать эту функцию, вы можете установить предварительную версию следующим образом:

pip install --pre --upgrade sqlalchemy

Источник: http://docs.sqlalchemy.org/en/latest/intro.html#install-via-pip

Альтернативное решение — напрямую ввести следующую команду SQL:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED  

Источник: https://msdn.microsoft.com/en-us/library/ms173763.aspx

Один из способов сделать последнее в SQL Alchemy:

query = 'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED'
session.connection().connection.execute(query)
person Mahdi    schedule 18.07.2016

Я заметил, что это старый пост, но интересно, ответ на этот вопрос заключается в том, чтобы убедиться, что правильный уровень изоляции включен на уровне базы данных

ИЗМЕНИТЬ БАЗА ДАННЫХ MyDatabase
УСТАНОВИТЬ ALLOW_SNAPSHOT_ISOLATION ON

ИЗМЕНИТЬ БАЗА ДАННЫХ MyDatabase
ВКЛЮЧИТЬ READ_COMMITTED_SNAPSHOT

https://docs.microsoft.com/en-au/dotnet/framework/data/adonet/sql/snapshot-isolation-in-sql-server

Как только уровень изоляции включен на уровне базы данных, вы можете установить уровень изоляции сеанса.

Надеюсь, это поможет.

person craba    schedule 30.06.2019