为了账号安全,请及时绑定邮箱和手机立即绑定

查询以检查值是否存在于一组列中

查询以检查值是否存在于一组列中

江户川乱折腾 2022-10-05 17:51:57
对于我的设置,我必须存储人们使用我的服务器玩的一些游戏的结果。在特定比赛结束时,我必须存储比赛结束、哪支球队获胜(球队 1 或球队 2)以及每支球队的球员。让我们假设玩家只是一个整数(这是它的标识 id)。因此,例如,在同一点上,我可能必须存储比赛编号 3124 结束,球队 1 赢得了那场比赛,第一支球队是由球员组成的(234213、215345、15661、673423,...)和团队 2 是由玩家 (21352, 756756, 2834568, ...) 创建的。问题是球员的数量是可变的,每队最多32人。我的第一个想法是使用 SQLAlchemy 创建一个 Postgres 数据库,但随后我必须创建一个包含 64 列的表(team1_player1、team1_player2、team1_player3、... ) 而且我还没有找到一种自动创建此表的方法。此外,我必须提交的一个典型查询是“这个玩家赢了多少场比赛?” 而找到这个问题的答案是一场需要 64 次查询的噩梦。NoSQL 数据库能更好地处理这个问题吗?我目前的解决方案至少可以接受吗?有没有办法检查特定玩家 ID 在 teamX_playerXX 表单的所有列中出现的次数?
查看完整描述

1 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

您可以使用 ManyToMany 关系在 SQLAlchemy 中轻松对此进行建模 在这里查看他们的文档 在您的应用程序中尝试这个


team_player_table = Table(

    'team_player', Base.metadata,

    Column('team_id', Integer, ForeignKey('team.id')),

    Column('player_id', Integer, ForeignKey('player.id'))

)



class Team(Base):

    __tablename__ = 'team'

    id = Column(Integer, primary_key=True)

    players = relationship('Player', secondary=association_table)



class Player(Base):

    __tablename__ = 'player'

    id = Column(Integer, primary_key=True)



game_team_table = Table(

    'game_team', Base.metadata,

    Column('game_id', Integer, ForeignKey('game.id')),

    Column('team_id', Integer, ForeignKey('team.id'))

)



class Game(Base):

    __tablename__ = 'game'

    id = Column(Integer, primary_key=True)

    teams = relationship('Team', secondary=association_table)

    winner_id = Column(Integer, ForeignKey('team.id'))

    winner = relationship('Team', backref=backref('won_games'))

通过这种方式,您可以查询玩家赢得了多少场比赛。


查看完整回答
反对 回复 2022-10-05
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号