我有两个对象,一个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()
我做错了什么?我该如何解决这个问题?
答案 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')