在我的应用程序中,我创建了一个以下类的实例,我想为我的应用程序的一个实例打开一个连接。我已经尝试将create_engine函数的poolclass参数更改为StaticPool或AssertionPool而没有运气。
SQLAlchemy总是为我的应用程序的每个实例打开两个连接,并始终保持其中一个连接空闲。
对于默认的QueuePool,我也尝试了诸如pool_size = 1和max_overflow = 0之类的参数,但我不能将总连接限制为1个连接。关于总连接数的documentation状态:"然后,池允许的并发连接总数为pool_size + max_overflow,池允许的“休眠”连接总数为pool_size"
我使用的是sqlalchemy 1.1.4和python 2.7。
这是我正在创建引擎的类的构造函数的代码:
class DBManager(object):
def __init__(self, connection_string):
try:
self.engine = create_engine(
connection_string,
poolclass=StaticPool
)
except NoSuchModuleError as module_error:
logging.error( str( module_error ) )
raise
except OperationalError as oper_error:
logging.error( str( oper_error ) )
raise
修改 我不想使用NullPool,因为我不想为每个事务重新创建数据库连接。我希望一直打开一个连接。
有人可以告诉我我做错了什么吗? 感谢
答案 0 :(得分:1)
我可以通过明确指定除poolclass=QueuPool
和pool_size=1
之外的max_overflow=0
来限制引擎创建的连接数,如下面的代码所示:
self.engine = create_engine(
connection_string,
pool_size=1,
max_overflow=0,
poolclass=QueuePool
)