У меня есть некоторые unittests, которые требуют ручной отладки. Как-то ничего не записывается в базу данных во время этих тестов.Во время django unittests база данных остается пустой
Есть ли способ заставить Django (или pytest?) Фиксировать изменения непосредственно при выполнении, чтобы я мог реально видеть, что находится в базе данных, когда я попал в точку останова?
my_object = SomeDefaultDjangoModel()
my_object.some_random_text = 'Just adding some data'
my_object.save()
foo = 'bar' <= Hitting breakpoint here.
Выполнение ручного SQL-запроса по моей базе данных возвращает 0 строк. Как я могу сделать эту работу?
* Обновление *
Проблема заключается в том, что Django не позволяет не сохранять изменения в базе данных до конца каждого запроса, который в большинстве случаев не является проблемой. Однако, если вы хотите обойти ORM и выполнять запросы с использованием необработанного соединения, похоже, для этого нужно создать отдельное соединение с базой данных. Поскольку все транзакции ожидаются до конца запроса, невозможно получить доступ к этим изменениям из другого соединения с базой данных. Это возвращает неверные результаты и приводит к сбою моих unittests.
Я не нашел способ совершения незавершенных транзакций (пока), поэтому я думаю, что начну писать методы save_raw() для своих моделей, которые просто сохраняют данные непосредственно в базе данных.
Или вы уверены, что имеете дело с тестовой базой данных? Он должен быть отделен от вашей «нормальной» базы данных. – elethan
Посмотрите на это https://docs.djangoproject.com/en/1.10/topics/testing/advanced/#advanced-features-of-transactiontestcase –