相关疑难解决方法(0)

Flask unittest和sqlalchemy使用所有连接

在我进行了大约100次单元测试后,我刚刚遇到了在我的烧瓶应用程序上运行unittests的问题.所有单元测试都将通过,但是当一次运行时,它们将失败并出现以下错误:

OperationalError: (OperationalError) FATAL:  remaining connection slots are reserved for non-replication superuser connections
Run Code Online (Sandbox Code Playgroud)

一切都在本地计算机上的virtualbox/vagrant/ubuntu12.04实例中运行.我的postgres max_connections设置为100,所以我假设连接没有关闭,运行100次测试后,我用完了所有可用的连接.

这个人Flask单元测试与SQLAlchemy和PostgreSQL耗尽db连接看起来他们有同样的问题.Mike/Zzzeek(sqlalchemy dev)甚至回应说它在create_app()中可能会发生一些事情,所以我在下面也包含了这些内容.

这是否意味着我没有在某处关闭我的连接?所有这些错误都是由db.create_all()我的unittest的setUp()方法触发的.

#test.py

class TestCase(DataMixin, Base):
    """Base test class"""

    def create_app(self):
        return create_app(TestConfig())

    def setUp(self):
        db.create_all()

    def tearDown(self):
        db.session.remove()
        db.drop_all()
Run Code Online (Sandbox Code Playgroud)

#app.py

def create_app(config=None):
    app = Flask(__name__)

    # Config
    app.config.from_object(BaseConfig())
    if config is not None:
        app.config.from_object(config)

    # Extensions
    db.init_app(app)
    mail.init_app(app)
    bcrypt.init_app(app)

    # Blueprints
    app.register_blueprint(core_blueprint, url_prefix='/')
    app.register_blueprint(accounts_blueprint, url_prefix='/account')
    app.register_blueprint(admin_blueprint, url_prefix='/admin')
    app.register_blueprint(cart_blueprint, url_prefix='/cart')

    # Login Manager
    login_manager.setup_app(app, add_context_processor=True)
    login_manager.login_view = "accounts.login"
    login_manager.user_callback = …
Run Code Online (Sandbox Code Playgroud)

postgresql sqlalchemy flask flask-sqlalchemy

4
推荐指数
2
解决办法
3316
查看次数

标签 统计

flask ×1

flask-sqlalchemy ×1

postgresql ×1

sqlalchemy ×1