构造SqlAlchemy exists查询

2024-09-28 03:18:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个表,prizes和{}。我以前试图找到一个用户没有解锁的查询。在

它的想法是,有一个任何用户都可以赢得的奖品表,并有一个表跟踪哪些用户赢得了哪些奖品。我使用烧瓶sqlalchemy,表格的定义如下:

class Prize(db.Model):
  __tablename__ = 'prizes'
  id = db.Column(db.Integer, primary_key = True)
  # ... some other info about the prize...


class PrizeUnlock(db.Model):
  __tablename__ = 'prize_unlocks'
  id = db.Column(db.Integer, primary_key = True)

  # associated prize
  prize_id = db.Column(db.Integer, db.ForeignKey('prizes.id'))
  prize = db.relationship('Prize',
    backref=db.backref('prize_unlocks'))

  # associated user
  user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
  user = db.relationship('User',
    backref=db.backref('prize_unlocks'))

我试图编写一个SqlAlchemy查询,从用户以前赢得的奖品中随机选择一个奖品。据我所知,我需要用一个exists子句来编写查询,但是我无法正确地完成它。在

有人能帮忙吗?在

如果有任何帮助,对应的sql查询如下所示:

select p.id from prizes as p where not exists (select * from prize_unlocks where prize_unlocks.prize_id=r.id) order by rand() limit 1;

编辑:得到答案了!梅特米尔非常接近,但我只是把最后的答案贴在这里,以防将来对某些人有所帮助。在

^{pr2}$

Tags: 用户iddbmodelcolumnintegerclassuser
1条回答
网友
1楼 · 发布于 2024-09-28 03:18:19

在筛选函数中使用子查询:

db.session.query(Prize.id).filter(
    db.session.query(PrizeUnlock.id)
        .filter(Prize.id == PrizeUnlock)
        .exists()
).order_by(Prize.id).limit(1)

相关问题 更多 >

    热门问题