与Flask,Postgres的SQLALchemy数据库会话

时间:2012-12-20 13:50:13

标签: python postgresql sqlalchemy flask

我正在使用SQLAlchemy和Flask,如下所示:http://flask.pocoo.org/docs/patterns/sqlalchemy/

我有一个Selenium测试套件,首先使用Firefox,然后使用Chrome。

在每个浏览器开始测试之前,测试数据库(PostgreSQL)中的表将被删除并创建。

它适用于第一个浏览器,但对于第二个浏览器,SQL创建/删除尝试只是冻结并且没有显示错误。

我相信这是因为开放的SQLAlchemy会话,这是正确的吗?

2 个答案:

答案 0 :(得分:3)

  

我相信这是因为开放的SQLAlchemy会话,这是正确的吗?

最有可能的情况。要确认,请连接到postgres数据库并运行SELECT * FROM pg_stat_activity;

我不确定你是如何处理数据库创建/删除的,但是在确保任何已检出的连接已被检出后,您可能希望在SQLAlchemy连接池上调用dispose()和可能recreate()返回(例如,使用session.close())。

答案 1 :(得分:0)

在使用SQLAlchemy和Postgres运行Flask unittest时,我也会遇到这种情况。很多时候,罪魁祸首是一个例外,它没有向上传播并被卡住。此例外也会阻止测试正确清理并因此冻结。

如果您正在创建测试套件,则在套装上调用debug方法,它将显示异常。链接了此方法的文档here

您对Sqlalchemy会话的观察也可能是一个原因。我将根据明天的观察结果来测试我的理论。如果它清除了一些疑问,那么我将在这里发布。

查看此answer,了解如何在异常时触发调试器。也许它可以帮助查明问题。