查找并删除所有空关系列表对象

时间:2013-08-27 18:41:19

标签: python database sqlalchemy flask flask-sqlalchemy

我有两个对象,一个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()

我做错了什么?我该如何解决这个问题?

2 个答案:

答案 0 :(得分: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个查询,以确定需要删除哪些团队。如果您需要经常进行这些搜索,最好重新考虑数据库的结构,以便更容易找到空团队。

答案 1 :(得分:0)

您是否尝试过级联选项?

players = db.relationship('Player', backref=backref("team",cascade="all,delete"), lazy='dynamic')