SQLAlchemy Session.commit()挂起

时间:2015-10-04 02:59:58

标签: mysql sqlalchemy tornado

我没有找到具体的问题/答案。如果它是一个副本,请道歉。

我正在使用SQLAlchemy的scoped_sessions(到MySQL)并在tornado的线程池中运行sql commit。在我的单元测试中,Session.commit()第一次通过,但第二次Session.commit()挂起。我在第一次提交后正确关闭会话。我启用了sqlalchemy日志记录,我可以看到在INSERT INTO ...之后没有任何内容发出第二次提交。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

你的会话初始化是什么样的?你没有使用autoflush吗?提交后尝试调用session.flush()

答案 1 :(得分:0)

问题是我在两次测试之间有一个待处理的事务。这导致下一次提交不会发生。

答案 2 :(得分:0)

遇到同样的问题(在以后提交时挂起),今天早些时候使我想到了这个问题。通过确保只有一个会话,我设法解决了这个问题。

就我而言,我正在为每个测试运行带有会话测试的集成测试,并以described in docs的形式向下滚动。我已经将所有数据库内容包装在DatabaseService类中,该类负责测试设置(派生的TestDatabaseClass在ctor中进行会话设置)。

问题是我设法两次初始化了DatabaseService实例(使用测试设置),并在以后创建的嵌套会话的提交(或在显式刷新调用中)遇到了挂起。因此,确保只有一个DatabaseService存在并且所有数据库查询都通过一个会话进行了,确实为我解决了这个问题。