UnitTest: Невозможно добавить много ко многим отношениям: ошибка целостности (кажется, удаление не делает его работу)

У меня есть две таблицы: человек и команда; у каждого есть отношение "многие ко многим" с другим.

Я делаю это в setUp функция (вызывается перед каждой функцией тестирования, 3 раза в моем случае)

p = Person(fname=u"John", lname=u"Doe")
Team(name=u"Anon", persons=[p])
session.commit()

И мой tearDown функция (вызывается после каждой функции тестирования)

Person.query.delete()
Team.query.delete()
session.commit()

Первый тест проходит, но когда setUp называется второй раз, я получил это:IntegrityError: (IntegrityError) columns person_id, team_id are not unique u'INSERT INTO team_persons__person_teams (person_id, team_id) VALUES (?, ?)' (5, 1)

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

1 ответ

Строки в вашем Person а также Team таблицы удаляются, а строка из таблицы сопоставления - нет. Это потому что query.delete() не обрабатывает каскадные отношения. Видите , SQLAlchemy Python не очищает вторичную (многие-ко-многим) таблицу? для подробного объяснения.

Вы должны быть в состоянии решить эту проблему с помощью session.delete(obj) для каждого объекта, который вы добавили. Или еще лучше, для модульного тестирования с базой данных в памяти, просто удалите и заново создайте все свои таблицы во время tearDown а также setUp,

Другие вопросы по тегам