UnitTest:无法添加多对多关系:完整性错误(似乎删除不做他的工作)

时间:2012-09-26 08:57:54

标签: python unit-testing foreign-keys sqlalchemy python-elixir

我有两张桌子:Person&团队;每个都与另一个有很多对多的关系。

我在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 个答案:

答案 0 :(得分:0)

正在删除PersonTeam表中的行,但关联表中的行不会被删除。这是因为query.delete()不处理关系级联。有关详细说明,请参阅Python's SQLAlchemy doesn't clean out the secondary (many-to-many) table?

您应该可以使用session.delete(obj)为已添加的每个对象解决此问题。或者更好的是,对于使用内存数据库的单元测试,只需在tearDownsetUp期间删除并重新创建所有表。