1

我有两个对象,一个 Player 对象和一个 Team 对象。

我想在没有球员的情况下在数据库中找到所有 Team 对象并将其删除。

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 回答