【问题标题】:Querying the same table more than once in SQLAlchemy在 SQLAlchemy 中多次查询同一个表
【发布时间】:2012-12-24 20:22:40
【问题描述】:

我在 Pyramid 应用程序中使用 SQLAlchemy,并有以下一对表。

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id          = Column(Integer, primary_key=True)
    name        = Column(String, nullable=False, default='', unique=True)
    manager     = Column(Integer, nullable=False, default=-1)

class MyStats(Base):
    __tablename__ = 'my_stats'
    id          = Column(Integer, primary_key=True)
    agent       = Column(Integer, ForeignKey("users.id"), nullable=False, index=True)
    manager     = Column(Integer, ForeignKey("users.id"), nullable=False, index=True)

    kpi_one     = Column(Integer)
    kpi_two     = Column(Integer)

MyStats 存储当时代理的经理(因此我们可以根据他们的经理是谁或我们喜欢的独立于他们的经理来查看他们的绩效如何变化)。

我想运行一个查询,得到以下信息:

Agent  Manager  KPI1   KPI2
Bob    Fred     1      1.1
Alice  Owain    1.2    0.9

等等等等。现在只使用代理名称或我可以做的经理名称来提取它:

DBSession.query(User.name, MyStats.kpi_one, MyStats.kpi_two).filter(User.id == MyStats.agent)

我不能同时查询两者。我一天中大部分时间都在努力解决这个问题,但做不到。

【问题讨论】:

    标签: python sqlalchemy pyramid


    【解决方案1】:

    你需要创建aliased tables:

    from sqlalchemy.orm import aliased
    
    agent = aliased(User, name='agent')
    manager = aliased(User, name='manager')
    DBSession.query(
            agent.name, manager.name, MyStats.kpi_one, MyStats.kpi_two
        ).filter(
            agent.id == MyStats.agent,
            manager.id == MyStats.manager
        )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-22
      相关资源
      最近更新 更多