0

如何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/rel_1_0/dialects/mssql.html#dsn-connections

4

2 回答 2

4

这仅在 SQL Alchemy 的 beta(预发布)版本(当前为 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)
于 2016-07-18T13:32:36.173 回答
0

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

ALTER DATABASE MyDatabase
SET ALLOW_SNAPSHOT_ISOLATION ON

ALTER DATABASE MyDatabase
SET READ_COMMITTED_SNAPSHOT ON

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

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

希望有帮助。

于 2019-06-30T07:53:13.287 回答