我是flask_sqlalchemy 的新手,虽然我了解一对多和多对多关系的工作原理,但我很难理解如何将它们应用于我的特定数据类型。我有以下三个表:TeamStat、PlayerStat 和 Stat,它们大致描述如下
class PlayerStat(db.Model):
id = db.Column(db.Integer, primary_key=True)
date = db.Column(db.DateTime, nullable=False, default=datetime.datetime)
player_id = db.Column(db.Integer, db.ForeignKey('player.player_id'), nullable=False)
class TeamStat(db.Model):
id = db.Column(db.Integer, primary_key=True)
date = db.Column(db.DateTime, nullable=False, default=datetime.datetime)
team_id = db.Column(db.Integer, db.ForeignKey('team.team_id'), nullable=False)
class Stat(db.Model):
id = db.Column(db.Integer, primary_key=True)
value = db.Column(db.String(80), nullable=False)
由于 Stat 是一种通用表类型,因此我希望在 PlayerStat 表(用于单个球员的统计数据)和 TeamStat 表(作为团队中所有球员的统计数据的总和)中使用它。有人可以帮助我了解如何以这种方式将一个子表引用到多个父表吗?
使用关联表将您的统计表连接到您的球员和团队表。这个例子非常接近你已经在做的事情,除了date
列被移动到 stat 记录表,我已经用未映射的表替换了你的PlayerStat
和TeamStat
对象。
我假设您有两个 ORM 类,Player
并且Team
(不是 Flask-SQLAlchemy 抱歉,但概念保持不变):
plr_stat_assc = Table('plr_stat_assc', Base.metadata,
Column('player_id', Integer, ForeignKey('player.id')),
Column('stat_id', Integer, ForeignKey('stat.id'))
)
team_stat_assc = Table('team_stat_assc', Base.metadata,
Column('team_id', Integer, ForeignKey('team.id')),
Column('stat_id', Integer, ForeignKey('stat.id'))
)
class Player(Base):
__tablename__ = 'player'
id = Column(Integer, primary_key=True)
stats = relationship("Stat", secondary=plr_stat_assc)
class Team(Base):
__tablename__ = 'team'
id = Column(Integer, primary_key=True)
stats = relationship("Stat", secondary=team_stat_assc)
class Stat(Base):
__tablename__ = 'stat'
id = Column(Integer, primary_key=True)
date = Column(DateTime, nullable=False, default=datetime.datetime)
value = Column(String(80), nullable=False)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句