【问题标题】:Query to check if a value exists in a set of columns查询以检查值是否存在于一组列中
【发布时间】:2020-07-23 15:44:15
【问题描述】:

对于我的设置,我必须存储人们使用我的服务器玩的一些游戏的结果。在特定比赛结束时,我必须存储比赛结束、哪支球队获胜(球队 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 表单的所有列中出现的次数?

谢谢!

【问题讨论】:

    标签: python sql database sqlalchemy


    【解决方案1】:

    您可以在 SQLAlchemy 中使用 ManyToMany 关系轻松地对此进行建模 看看他们的文档here 在你的应用中试试这个

    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'))
    

    这样您就可以查询玩家赢得了多少场比赛。

    【讨论】:

    • 非常感谢!这正是我所需要的!
    • @SteP 很高兴为您提供帮助。你能接受答案吗?
    猜你喜欢
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 2022-08-26
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多