我的Django应用程序中有一组测试用于传递,但在软件演变的某些时候,当我运行测试时,我开始得到这种消息:
错误:无法刷新数据库test_totomanager_demo。可能的原因:
*数据库未运行或配置不正确
*至少有一个预期的数据库表不存在
* SQL无效
提示:查看'django-admin.py sqlflush'的输出。那是这个命令无法运行的SQL
完整错误:(1105,“MyISAM表'video_videoinstallation'正在使用中(最有可能是MERGE表)。尝试FLUSH TABLES。”)
数据库是MySQL。
此错误开始发生的确切测试是不可预测的。这不是第一次发生,但经过一两次尝试之后它已经过去了,这次我无法让测试结束。
有关如何避免这种情况的任何提示?
答案 0 :(得分:1)
可能是因为您的表类型是MyISAM,它会锁定整个表,如果您不需要在此表中使用“FULL TEXT SEARCH”,那么您应该将其设为innodb表。
我不知道django测试是如何运行的,但一种可能的解决方案是一次运行一个测试而不是一次运行它们以避免在表被锁定时进行测试。
答案 1 :(得分:0)
我自己就是遇到这个问题并意识到这是因为我还没有为模型更改创建迁移。
尝试:
./manage.py schemamigration <your_app_name> --auto
我在此virtualenv中安装了南迁移,因此如果您不想自己编写迁移,则可能需要这样做。
答案 2 :(得分:0)
使用python的TestCase类而不是Django的。
Replace
from django.test import TestCase
class TestChrono(TestCase):
with
import unittest
class TestChrono(unittest.TestCase):
这是解决方法,但如果您不使用灯具,它肯定不会影响您的测试用例。 Django Testcase尝试使用事务管理,因此您收到此错误。