0

我有两张桌子:Person & Team;每个都与另一个具有多对多关系。

我在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)

似乎 delete 第一次并没有真正删除行。我不明白为什么会这样。

4

1 回答 1

0

PersonTeam表中的行被删除,但关联表中的行未被删除。这是因为query.delete()不处理关系级联。看到Python 的 SQLAlchemy 没有清除辅助(多对多)表?详细说明。

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

于 2012-09-27T14:29:28.280 回答