我有一个运行MySQL 5.1和MyISAM表的django 1.5应用程序。我升级到MySQL 5.5并将我的表转换为InnoDB,现在我的测试失败,超出了“锁定等待超时”。该应用程序本身工作正常。
在我的测试中,我从fixture中加载了一些表,然后派出一个python脚本,将数据加载到其他表中。在那个python脚本中,我调用了get_or_create
,这就是失败的原因。它正在等待一个表上的锁,我正在获取或创建的对象有一个外键引用(这是一个从一个fixture加载的表)。我想我知道发生了什么 - django在一个事务中运行测试,外部python脚本在测试中运行自己的MySQL连接,所以它在自己的事务中。检查外键时,由于事务未提交,表被锁定。
我尝试将tx_isolation
从REPEATABLE-READ
(最初的原因)更改为READ-COMMITTED
,然后更改READ-UNCOMMITTED
,但行为没有变化。
有没有办法解决这个问题?