Ошибка django-admin.py sqlflush во время тестов - PullRequest
7 голосов
/ 22 декабря 2010

У меня есть набор тестов в моем приложении Django, которые раньше проходили, но в какой-то момент эволюции программного обеспечения я начал получать такого рода сообщение при запуске тестов:

Ошибка: база данных test_totomanager_demo не может быть сброшена. Возможные причины:
* База данных не работает или настроена неправильно.
* По крайней мере одна из ожидаемых таблиц базы данных не существует.
* SQL был недействительным.
Подсказка: посмотрите на вывод django-admin.py sqlflush. Это SQL, который не удалось выполнить этой команде.
Полная ошибка: (1105, «MyISAM table« video_videoinstallation »используется (скорее всего, таблицей MERGE). Попробуйте FLUSH TABLES.»)

База данных MySQL.

Точный тест, в котором эта ошибка начинает возникать, непредсказуем. Это не первый раз, когда это происходит, но после одной или двух попыток, которые раньше проходили, на этот раз я не могу довести тесты до конца.

Любой намек на то, как этого избежать?

Ответы [ 3 ]

1 голос
/ 25 марта 2012

Вероятно, это потому, что ваш тип таблицы - MyISAM, который блокирует всю таблицу. Если вам не нужен "ПОЛНЫЙ ТЕКСТОВЫЙ ПОИСК" в этой таблице, то вы должны сделать ее таблицей innodb.

Я не знаю, как выполняются тесты django, но одно из возможных решений - запускать по одному тесту за раз, а не запускать их все сразу, чтобы избежать тестирования, пока таблица заблокирована.

0 голосов
/ 24 июля 2015

Используйте класс Python TestCase вместо Django.

Replace

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

with

import unittest
class TestChrono(unittest.TestCase):

Это временное решение, но оно определенно не повлияет на ваш тестовый случай, если вы не используете приборы. Django Testcase пытается поиграть с управлением транзакциями, и вы получаете эту ошибку.

0 голосов
/ 01 мая 2012

Я сам столкнулся с этой проблемой и понял, что это потому, что я еще не создал миграцию для изменения модели.

Попробуйте:

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

У меня установлены южные миграцииvirtualenv, так что это, вероятно, требование, если вы не хотите сами писать миграцию.

...