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

标签 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()

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

最佳答案

这可能会起作用:

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 次查询,以确定需要删除哪些团队。如果您需要经常进行这些搜索,那么重新考虑数据库的结构可能是个好主意,以便更轻松地找到空团队。

关于python - 查找并删除所有空关系列表对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18473108/

相关文章:

mysql - 重复问题

java - 如何指定一个字段,以便当我们查询时,使用该字段的 Joda LocalDate 或 LocalDateTime 值,将其映射到同一列?

python - 将字典绑定(bind)到 SQLAlchemy 模型以进行更新

python - StringIO 和 Pandas read_csv

python - SQLAlchemy:树节点中的递归混合属性

python - matplotlib 中 savefig JPG 的 IOError

php - 为什么查询只返回一条记录而不是许多记录?

sqlalchemy - 使用共享模式的 SQLAlchemy 中基于行/列的 Multi-Tenancy

python - 使用带公钥和密码的 SSH 隧道,使用 SQLAlchemy 连接到远程 PostgreSQL 数据库,所有这些都来自 Windows 机器

python - 如何打开蓝牙连接并成为A2DP源和接收器