Hi Everyone,
I'm somewhat new to database design, so if I've set things up in an
incompatible or silly manner please let me know.  I have the following
tables:

class Player(Base):
   __tablename__ = "players"
   # Stuff about a player.

class
Game(Base):
  """A class that holds information about a single
game."""

  __tablename__ =
"games"

  #
Columns
  id = Column(Integer, primary_key =
True)
  board =
Column(Binary)
  match_length =
Column(Float)
  date_added = Column(DateTime, default =
datetime.datetime.now)

class
Score(Base):
  """A class that holds a player's score for a
game."""

  __tablename__ =
"scores"

  #
Columns:
  id = Column(Integer, primary_key =
True)
  game_id = Column(Integer,
ForeignKey("games.id"))
  player_id = Column(Integer,
ForeignKey("players.id"))
  score =
Column(Integer)

  #
Relations:
  game = relation(Game, backref =
backref("scores"))
  player =
relation(Player)

  # Back
References:
  # "game" which points to the game for this object.

I'd like to figure out how to count the wins and losses for a player.
I was thinking something along these lines:
player = session.query(Player).filter(Player.name == playername).one()
games_containing_player = session.query(Game).filter(player in
Game.scores.player).all()

But that pretty obviously doesn't work.  Should I have designed this
set up differently?  Right now the only thing I've come up with,
(which seems to think the player is in every game as well which is
wrong) and is really really slow, is:

Get the player.
    player = session.query(models.Player).filter(sqlalchemy.and_(
        models.Player.owner == user,
        models.Player.name == playername,
        models.Player.version == version)).one()
    if not player:
      return "Not a valid player."

    # Compute the player's win/loss list.
    win_loss = []
    games = session.query(models.Game).all()

    def had_player(game):
      for score in game.scores:
        if score.player == player:
          return True
      return False

    filter(had_player, games)
    return "%s played %d games." % (player.name, len(games))


Thanks for the advice,
Gabe

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to