0

個人とチームの2つのテーブルがあります。それぞれが他と多対多の関係にあります。

関数でこれを行います(テストの各関数のに、私の場合は3回setUp呼び出されます)

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、2 回目に が呼び出されると、次のようになりました。 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

Personテーブルとテーブルの行はTeam削除されていますが、関連付けテーブルの行は削除されていません。これは、query.delete()がリレーションシップ カスケードを処理しないためです。Python の SQLAlchemy がセカンダリ (多対多) テーブルを消去しないのを参照してください。詳細な説明については。

session.delete(obj)追加した各オブジェクトを使用することで、これを解決できるはずです。または、メモリ内データベースを使用した単体テストの場合は、 と の間にすべてのテーブルを削除して再作成するだけtearDownですsetUp

于 2012-09-27T14:29:28.280 に答える