如何完全删除sqlalchemy中的数据库连接?在任何地方 python 上给予 max_user_limit
How to completely remove database connection in sqlalchemy? Giving max_user_limit on python anywhere
我在 Pythonanywhere 上托管了一个 Flask 应用程序。我必须从数据库中进行一些查询的地方。在使用 MySQLdb 时,我能够关闭与数据库的所有连接并且不会出现任何错误。但是在使用 sqlalchemy 时,一些与数据库的连接不会关闭。
这是我的连接管理器 class,它定义了一个关闭数据库连接的方法。
class ConnectionManager:
def __init__(self):
self.base = declarative_base()
def get_db_session(self):
self.engine = create_engine(get_db_path())
self.base.metadata.bind = self.engine
self.session_maker = sessionmaker(bind = self.engine)
self.session = self.session_maker()
return self.session
def persist_in_db(self,record):
session = self.get_db_session()
session.add(record)
session.commit()
session.close()
def close_session(self):
self.session.close()
self.session_maker.close_all()
del self.session
del self.session_maker
del self.engine
#self.engine.dispose()
在从应用程序返回响应之前,我调用了 close_session 方法。
所以我的问题基本上是我在概念上哪里出错了,我怎样才能完全删除数据库连接。
这是由于connection pooling. You can disable connection pooling by using NullPool
造成的。
self.engine = create_engine(get_db_path(), poolclass=NullPool)
不过要小心,如果每个 Web 请求都需要数据库连接,这在 Web 应用程序中可能不是一个好主意。
我在 Pythonanywhere 上托管了一个 Flask 应用程序。我必须从数据库中进行一些查询的地方。在使用 MySQLdb 时,我能够关闭与数据库的所有连接并且不会出现任何错误。但是在使用 sqlalchemy 时,一些与数据库的连接不会关闭。
这是我的连接管理器 class,它定义了一个关闭数据库连接的方法。
class ConnectionManager:
def __init__(self):
self.base = declarative_base()
def get_db_session(self):
self.engine = create_engine(get_db_path())
self.base.metadata.bind = self.engine
self.session_maker = sessionmaker(bind = self.engine)
self.session = self.session_maker()
return self.session
def persist_in_db(self,record):
session = self.get_db_session()
session.add(record)
session.commit()
session.close()
def close_session(self):
self.session.close()
self.session_maker.close_all()
del self.session
del self.session_maker
del self.engine
#self.engine.dispose()
在从应用程序返回响应之前,我调用了 close_session 方法。 所以我的问题基本上是我在概念上哪里出错了,我怎样才能完全删除数据库连接。
这是由于connection pooling. You can disable connection pooling by using NullPool
造成的。
self.engine = create_engine(get_db_path(), poolclass=NullPool)
不过要小心,如果每个 Web 请求都需要数据库连接,这在 Web 应用程序中可能不是一个好主意。