python - Flask SQLAlchemy:具有多个父级的子表?
问题描述
我是 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
列被移动到统计记录表,我已经用未映射的表替换了你的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)
推荐阅读
- azure-devops - Azure DevOps:使用作业矩阵变量填充安全文件引用
- mongodb - MongoDB 无法连接连接超时:通过 Atlas 连接
- flutter - 键盘在颤动中阻碍屏幕
- postgresql - Postgres:数字类型的无效输入语法:“2021-02-14”......但它是日期时间格式?
- tfs - 有没有办法自动签入挂起的更改 TFS 2018
- rabbitmq - RabbitMQ:微服务通信的铲子与联邦
- python - 给定一个异常实例,打印回溯
- arrays - 传递给 fgets 的正确长度
- swift - 日期选择器视图超小 - Swift Xcode
- python - 为什么我的 SQL 查询中的 COUNT(*) 返回多个值?如何为找到的总行获取一个值?