如何为SQLAlchemy引擎准确打开一个连接?

时间:2017-10-13 20:18:02

标签: python sqlalchemy

在我的应用程序中,我创建了一个以下类的实例,我想为我的应用程序的一个实例打开一个连接。我已经尝试将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,因为我不想为每个事务重新创建数据库连接。我希望一直打开一个连接。

有人可以告诉我我做错了什么吗? 感谢

1 个答案:

答案 0 :(得分:1)

我可以通过明确指定除poolclass=QueuPoolpool_size=1之外的max_overflow=0来限制引擎创建的连接数,如下面的代码所示:

self.engine = create_engine( 
    connection_string,
    pool_size=1,
    max_overflow=0,
    poolclass=QueuePool
    )