1

Player オブジェクトと Team オブジェクトの 2 つのオブジェクトがあります。

プレイヤーのいないデータベース内のすべてのチーム オブジェクトを見つけて削除したいと考えています。

class Team(db.Model):
    __tablename__ = 'Team'
    id = db.Column(db.Integer, primary_key=True)
    players = db.relationship('Player', backref='team', lazy='dynamic')

これは私がこれまでに試したことです(失敗しました):

all_teams = Team.query.all()
for a_team in all_teams:
    if not a_team.players: # have also tried this with a .query.all() and a .all()
        db.session.delete(a_team)
db.session.commit()

私は何を間違っていますか?これを修正するにはどうすればよいですか?

4

2 に答える 2

1

これはおそらくうまくいくでしょう:

all_teams = Team.query.all()
for a_team in all_teams:
    if a_team.players.count() == 0
        db.session.delete(a_team)
db.session.commit()

ただし、この方法は非常に非効率的であることに注意してください。チームが 100 ある場合、上記のコードはデータベースに対して 101 クエリを発行して、どのチームを削除する必要があるかを判断する必要があります。これらの検索を頻繁に行う必要がある場合は、空のチームを見つけやすくするためにデータベースの構造を再考することをお勧めします。

于 2013-08-28T01:34:33.473 に答える
0

カスケードオプションを試しましたか?

players = db.relationship('Player', backref=backref("team",cascade="all,delete"), lazy='dynamic')
于 2013-08-27T19:15:34.543 に答える