如何在 Sql Alchemy Python 中为 MS SQL 后端指定事务隔离级别

How do I specify Transaction Isolation Level for MS SQL backend in Sql Alchemy Python

如何为通过 SQL Alchemy 引擎对象完成的所有查询设置事务级别 READ UNCOMMITED

我设置了 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 服务器),我收到以下错误,这可能不足为奇,因为文档确实说它是特定于方言的。我很惊讶 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/rel_1_0/dialects/mssql.html#dsn-connections

这仅在 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)

我注意到这是一个旧的 post,但想知道这个问题的答案是否是确保在数据库级别打开正确的隔离级别

更改数据库 MyDatabase
设置 ALLOW_SNAPSHOT_ISOLATION 开启

更改数据库 MyDatabase
设置READ_COMMITTED_SNAPSHOT开

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

在数据库级别启用隔离级别后,您就可以设置会话隔离级别。

希望对您有所帮助。