Во время выполнения TestCase SQL-запрос django.db.connection.cursor () возвращает данные из основной БД, а не из тестовой. - PullRequest
1 голос
/ 03 октября 2019

Я столкнулся с проблемой, которую у меня больше нет идей, как ее решить.

Мне нужно проверить данные, которые возвращаются прямым запросом из базы данных. Во время выполнения TestCase django.db.connection.cursor() возвращает данные из основной базы данных, а не из тестовой, которые содержат приборы, подготовленные для этого теста.

Я пытался использовать оба TestCase и TransactionalTestCase . Я попробовал отладку, проверил значения переменных и обнаружил, что connection точно указывает на тестовую базу данных.

Знаете ли вы, почему он возвращает данные из основной базы данных? Есть ли случай, когда Django копирует данные из основной базы данных в эту, созданную для целей тестирования?

Я использую: Python 3.6.5, Django 2.1, pytest 4.6.3, pytest-django 3.5

Заранее благодарен за любую поддержку.


Follow-up

Уважаемые

Эта проблема возникает только при попытке выполнить пользовательский необработанный SQL-запрос напрямую внутри Контрольный пример. Получение объектов по стандартному Django QuerySets работает нормально.

Есть ли у вас какие-либо идеи, почему этот конкретный способ получения данных из базы данных не работает во время выполнения теста?

1 Ответ

0 голосов
/ 07 октября 2019

Я нашел ответ в документации Django:

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

Тем не менее - если вы знаете какой-либо способ избежать влияния тестов на производственные данные во время выполнения необработанных SQL-запросов, я хотел бы знать, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...