如何为通过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 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
答案 0 :(得分:3)
这仅适用于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)
答案 1 :(得分:0)
我注意到这是一篇老文章,但是想知道这个问题的答案是否是确保在数据库级别打开正确的隔离级别
ALTER DATABASE MyDatabase
将ALLOW_SNAPSHOT_ISOLATION设置为
ALTER DATABASE MyDatabase
开启READ_COMMITTED_SNAPSHOT
https://docs.microsoft.com/en-au/dotnet/framework/data/adonet/sql/snapshot-isolation-in-sql-server
一旦在数据库级别启用了隔离级别,就可以设置会话隔离级别。
希望有帮助。