Python Flask/SQLAlchemy-无法删除应用程序工厂中的会话对象

Python Flask/SQLAlchemy-无法删除应用程序工厂中的会话对象,python,flask,sqlalchemy,Python,Flask,Sqlalchemy,正如SQLAlchemy文档所建议的那样,我试图在请求拆卸时删除一个作用域_会话对象,但要么我误解了这个过程(很可能),要么我做错了什么,它不能正常工作(很可能) 我正在绘制蓝图,下面是我如何初始化DB连接: # this is db.py import os import urllib import pyodbc from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker, exc from co

正如SQLAlchemy文档所建议的那样,我试图在请求拆卸时删除一个作用域_会话对象,但要么我误解了这个过程(很可能),要么我做错了什么,它不能正常工作(很可能)

我正在绘制蓝图,下面是我如何初始化DB连接:

# this is db.py

import os
import urllib
import pyodbc
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, exc

from config import Config as app_config

from .models import Base


# Turn off pyodbc pooling
pyodbc.pooling = False

# TODO: put these into ENV variables
connection_params = {
    # params here
}
db_params = urllib.parse.quote_plus(("DRIVER={driver};SERVER={server};PORT=1433;DATABASE={database};UID={username};PWD={password};TDS_Version=7.2;").format(**connection_params))

connection_string = "mssql+pyodbc:///?odbc_connect=%s" % db_params

engine = create_engine(
    connection_string, connect_args={"check_same_thread": False}
)

Base.prepare(engine, reflect=True)

SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
这就是我在主blueprint的routes.py文件中分解请求的方式:

@main_bp.teardown_request
def remove_session(*args, **kwargs):
    current_app.session.remove()
我认为如果我执行session.remove()将释放池中的连接,但我仍然看到数据库中有一个连接正在休眠。 如果在.remove()之前和之后打印会话,我也会得到相同的内存地址

拆卸-拆卸前的会话
拆卸-拆卸后的会话
如何检查会话是否已正确删除

我知道很多上面没有达到标准,我正在学习,所以我会很感激如何做得更好。

@main_bp.teardown_request
def remove_session(*args, **kwargs):
    current_app.session.remove()
teardown - session before remove
<sqlalchemy.orm.scoping.scoped_session object at 0x75b11610>
teardown - session After remove
<sqlalchemy.orm.scoping.scoped_session object at 0x75b11610>