在一些表中选择几个相关的列

时间:2010-08-09 22:25:38

标签: python sqlalchemy

我有这些课程:

class Channel(rdb.Model):
    rdb.metadata(metadata)
    rdb.tablename("channels")

    id = Column("id", Integer, primary_key=True)
    title = Column("title", String(100))


    items = relationship("MediaItem", secondary=channel_items, order_by="MediaItem.titleView", backref="channels")

class MediaItem(rdb.Model):
    rdb.metadata(metadata)
    rdb.tablename("media_items")

    id = Column("id", Integer, primary_key=True)
    title = Column("title", String(100))

class User(rdb.Model):
    rdb.metadata(metadata)
    rdb.tablename("users")

    id = Column("id", Integer, primary_key=True)
    name = Column("name", String(50))

    channels = relationship("Channel", secondary=user_channels, order_by="Channel.titleView", backref="users")

MediaItem与频道相关,频道与用户相关。

如果我想从项目和频道中选择一些列,我会这样做:

session = Session()
result = session.query(Channel).join(Channel.items).values(Channel.title, Item.title)

我得到了一个Channel类及其项目的实例。

我的问题是我不知道如何从User,Channel和Item中选择一些列。我如何进行查询,例如,我可以选择仅具有Channel.title属性的User.name属性及其通道以及仅具有Item.title属性的那些通道的项目?

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可以通过明确定义的模型使用sqlalchemy表达式构建器:

session.query(User.name, Channel.title, MediaItem.title)\
  .join(Channel.users).join(MediaItem.channels)

您可以在文档中查看: http://www.sqlalchemy.org/docs/orm/query.html?highlight=join#sqlalchemy.orm.query.Query.join