测试期间 django-admin.py sqlflush 错误

发布于 2024-10-08 23:54:13 字数 459 浏览 3 评论 0原文

我的 Django 应用程序中有一组测试曾经通过,但在软件发展的某个时刻,当我运行测试时,我开始收到此类消息:

错误:数据库 test_totomanager_demo 无法刷新。可能原因:
  * 数据库未运行或配置不正确。
  * 至少有一个预期的数据库表不存在。
  * SQL 无效。
提示:查看“django-admin.py sqlflush”的输出。这是该命令无法运行的 SQL。
完整错误:(1105,“MyISAM 表 'video_videoinstallation' 正在使用中(很可能由 MERGE 表使用)。尝试 FLUSH TABLES。”)

数据库是 MySQL。

开始发生此错误的确切测试是不可预测的。这不是第一次发生,但尝试过一两次后就可以通过,这次我无法使测试到达终点。

关于如何避免这种情况的任何提示?

I have a set of tests in my Django application that used to pass, but at some point of the software evolution I started to get this kind of message when I run the tests:

Error: Database test_totomanager_demo couldn't be flushed. Possible reasons:
  * The database isn't running or isn't configured correctly.
  * At least one of the expected database tables doesn't exist.
  * The SQL was invalid.
Hint: Look at the output of 'django-admin.py sqlflush'. That's the SQL this command wasn't able to run.
The full error: (1105, "MyISAM table 'video_videoinstallation' is in use (most likely by a MERGE table). Try FLUSH TABLES.")

The database is MySQL.

The exact test in which this error starts to occur is unpredictable. It's not the first time it happens, but after one or two tries it used to pass, this time I can't make the tests reach the end.

Any hint on how to avoid this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

琴流音 2024-10-15 23:54:13

这可能是因为你的表类型是MyISAM,它锁定了整个表,如果你不需要在这个表中“全文搜索”那么你应该将其设为innodb表。

我不知道 django 测试如何运行,但一种可能的解决方案是一次运行一个测试,而不是一次运行所有测试,以避免在表锁定时进行测试。

It is probably because your table type is MyISAM which locks the whole table, if you don't need "FULL TEXT SEARCH" in this table then you should make it an innodb table.

I don't know how django tests run, but one possible solution is to run one test at a time instead of running them all at once to avoid testing while table is locked.

放赐 2024-10-15 23:54:13

我自己也遇到了这个问题,并意识到这是因为我尚未为模型更改创建迁移。

尝试:

./manage.py schemamigration <your_app_name> --auto

我在这个 virtualenv 中安装了南迁移,所以如果您不想自己编写迁移,这可能是一个要求。

I was just having this problem myself and realized it's because I had not yet created a migration for a model change.

Try:

./manage.py schemamigration <your_app_name> --auto

I have south migrations installed in this virtualenv, so that's probably a requirement if you don't want to write the migration yourself.

深海不蓝 2024-10-15 23:54:13

使用 python 的 TestCase 类而不是 Django 的。

Replace

from django.test import TestCase
class TestChrono(TestCase):

with

import unittest
class TestChrono(unittest.TestCase):

这是解决方法,但如果您不使用固定装置,它肯定不会影响您的测试用例。 Django Testcase 尝试使用事务管理,因此您收到此错误。

Use python's TestCase class instead of Django's.

Replace

from django.test import TestCase
class TestChrono(TestCase):

with

import unittest
class TestChrono(unittest.TestCase):

This is workaround solution but definately it will not affect your test case if you are not using fixtures. Django Testcase try to play with transaction management and so you are getting this error.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文