2014-12-01 53 views
0

我建立一个烧瓶应用与SQLAlchemy的查询和SQL Server数据库存储。最近,我在SQL Server活动监视器发现有很多打开的会话是这样的:麻烦与“IF @@ TRANCOUNT> 0 COMMIT TRAN”

capture

我做了一些搜索,并没有找到任何理由。我想知道是否有人知道是什么原因造成这个问题?

注:一些背景,要求市直瓶上下文管理似乎是好(点击所以周围的网站上,并运行的查询不会导致此)。只有当我运行后端芹菜任务时才会发生这种情况。

是否有可能是由我的代码结构引起的?

我这是怎么定义的会话连接(使用scoped_session):

engine = create_engine('connection string here') 
db_session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine)) 
Base = declarative_base() 
Base.query = db_session.query_property() 

任何帮助,将不胜感激,谢谢!

回答

0

我想在你的应用程序中发生的,你写一些代码,不会像....

BEGIN TRANSACTION 

-- Some code here 


IF @@TRANCOUNT > 0 
BEGIN 
    COMMIT TRANSACTION; 
END 

但怎么样,如果你已经打开了交易后的代码没有任何影响行?

您还没有提交它,这是有道理的,因为没有改变承诺,但你已经离开打开的事务。

你的代码看起来应该是这样...

BEGIN TRANSACTION 

-- Some code here 


IF @@TRANCOUNT > 0 
BEGIN 
    COMMIT TRANSACTION; 
END 
ELSE 
BEGIN 
    ROLLBACK TRANSACTION; 
END 
+0

我怕我没有任何像这样的代码,无论是它的ORM模型内完成,或者只是一些简单的'SELECT'和' UPDATE'查询。我检查了所有'UPDATE'提交使用'db_session.commit()'和'SELECT'查询使用'fetchall()'解析。 – xbb 2014-12-01 22:42:22

+0

如果你没有任何像这样的代码,那么SQL服务器活动监视器必须骗你:) – 2014-12-01 23:04:53

+0

我有一个非常类似的任务,但不是使用芹菜来安排任务,我用Windows计划任务,这是不是导致此问题。奇怪...可能需要挖一点点.. – xbb 2014-12-01 23:09:36