亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

查詢以檢查值是否存在于一組列中

查詢以檢查值是否存在于一組列中

江戶川亂折騰 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 關注
  • 93 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號