【发布时间】:2021-12-21 01:08:50
【问题描述】:
DB 中有 2 个表,它们之间的关系通过 Player 表中的 ext 列。
玩家 id/names 超过 1000 个,ExtPlayer 列也有几个。使用filter() 或filter_by() 在一次或几次查询中将前5 名玩家一起查询其ExtPlayer 数据,避免加载所有ExtPlayer 表。
top = [x.id for x in player_top]列表
我在尝试过程中尝试过类似这些或类似的查询
ext_data = ExtPlayer.query.filter_by(player_id=top).all() 或
db.session.query(ExtPlayer).filter(
or_(ExtPlayer.player_id.like(top1),...,
ExtPlayer.player_id.like(top5))
)
简化模型/表格
lass Player(db.Model):
id = db.Column(db.Integer, primary_key=True)
lastseen = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
name = db.Column(db.String(32))
ext = db.relationship('ExtPlayer', backref='extplayer', cascade="all, delete")
class ExtPlayer(db.Model):
created = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
id = db.Column(db.Integer, primary_key=True)
trophies = db.Column(db.Integer)
player_id = db.Column(db.Integer, db.ForeignKey('player.id'))
感谢任何提示。
【问题讨论】:
标签: python flask sqlalchemy orm