【发布时间】:2018-03-04 14:17:58
【问题描述】:
我正在开发一个购买/销售游戏内物品的视频游戏拍卖网站。 我希望能够查询 Auctions 表并按“最热门”拍卖对其进行排序。这是基于在拍卖中每小时的出价数量。
这是拍卖模型:
class Auctions(db.Model):
id = db.Column(db.Integer, primary_key=True, index=True)
posted = db.Column(db.DateTime())
end = db.Column(db.DateTime())
...
bids = db.relationship('Bids', backref='auctions', lazy='dynamic', order_by='desc(Bids.amount)', cascade="all, delete-orphan")
这是出价模型:
class Bids(db.Model):
id = db.Column(db.Integer, primary_key=True, index=True)
bidder_id = db.Column(db.Integer, db.ForeignKey('user.id'), index=True)
auction_id = db.Column(db.Integer, db.ForeignKey('auctions.id'), index=True)
amount = db.Column(db.Integer)
posted = db.Column(db.DateTime())
我可以像这样按出价数量对它们进行排序:
hot_stmt = db.session.query(models.Bids.auction_id, func.count('*').label('bid_count')).group_by(models.Bids.auction_id).subquery()
hot = db.session.query(models.Auctions, hot_stmt.c.bid_count).outerjoin(hot_stmt, (models.Auctions.id == hot_stmt.c.auction_id)).order_by(hot_stmt.c.bid_count.desc()).limit(5)
我可以用这个计算和列出每小时的出价:
for auc, count in hot:
time_delta = datetime.utcnow() - auc.posted
auc_hours = time_delta.seconds / 60 / 60
print(auc.id, count / auc_hours)
如何按出价/小时对查询进行排序,以便查询返回前 5 个最热门的拍卖?
【问题讨论】:
标签: python flask sqlalchemy relationship