У меня есть пара модульных тестов в классе Python, каждый из которых проходит по отдельности. Большинство тестов создают несколько таблиц в тестовой базе данных mysql, и перед каждым тестом в методе setUp тестовая база данных очищается с помощью серии команд
set FOREIGN_KEY_CHECKS = 0;
select concat('drop table ', table_name, ';') as 'command'
from information_schema.tables where table_schema = 'test_db';
set FOREIGN_KEY_CHECKS = 1;
, выданных методом execute SQLAlchemy двигатель. Когда я выполняю весь тестовый класс, после нескольких тестов, выполнение застревает в методе «очистки», обычно после того, как таблица, которая была целью ссылок на внешний ключ, была удалена, но она не кажется полностью детерминированной c, а также зависит от порядка выполнения тестов. Когда я запускаю ожидающие команды отбрасывания непосредственно в строке mysql -команды (после уничтожения запущенных модульных тестов), они успешно выполняются, поэтому, очевидно, это не чистая MySql -задача. К сожалению, мне не удалось создать минималистичный пример c, иллюстрирующий проблему. У кого-нибудь есть идея, в чем причина? Также были бы полезны предложения, что еще я мог бы попробовать отладить.
Редактировать: То же самое происходит, когда я использую Metadata.drop_all () вместо raw sql.