我正在构建一个Flask应用程序,其中SQLAlchemy用于查询,SQL Server用于数据库存储。最近我注意到在SQL Server Activity Monitor中有很多开放会话看起来像这样:
我做了一些搜索,却找不到任何理由。我想知道是否有人知道是什么导致了这个问题?
注意:有些背景,直接在Flask上下文管理的请求似乎没问题(因此在网站上点击并运行查询不会导致这种情况)。只有当我运行后端Celery Task时才会发生这种情况。
是否可能由我的代码结构引起?
这就是我定义会话连接的方式(使用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 :(得分:0)
我认为您的应用程序正在发生的事情是,您编写了一些类似于......的代码。
BEGIN TRANSACTION
-- Some code here
IF @@TRANCOUNT > 0
BEGIN
COMMIT TRANSACTION;
END
但是,如果打开事务后的代码是否影响了任何行呢?
你还没有提交它,这是有道理的,因为没有改变提交,但你已经离开了OPEN TRANSACTION。
您的代码应该看起来像这样...
BEGIN TRANSACTION
-- Some code here
IF @@TRANCOUNT > 0
BEGIN
COMMIT TRANSACTION;
END
ELSE
BEGIN
ROLLBACK TRANSACTION;
END