see these
http://www.sqlalchemy.org/docs/05/ormtutorial.html#datamapping_joins_relationop
On Sunday 21 September 2008 20:04:02 Gabe wrote:
> 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 [email protected]
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
-~----------~----~----~----~------~----~------~--~---