SQL Alchemy查询星型模式

时间:2015-06-03 13:21:59

标签: python sqlalchemy

我正在尝试使用SQL alchemy映射现有的星型模式数据库,并且无法构建我的连接。我已经阅读了文档和堆栈溢出,但没有找到一个明确的答案。

这是我班级的简单布局。学校和学生是具有上下文信息的不同维度表。 StudentScore是一个事实表,是一个多对多的关联表,并且每个学生评估都有一行。

class School(Base):
    __tablename__ = 'DimSchool'

    id = Column('SchoolKey', Integer, primary_key=True)
    name = Column('SchoolName', String)
    district = Column('SchoolDistrict', String)

class Student(Base):
    __tablename__ = 'DimStudent'

    id = Column('StudentKey',Integer, primary_key=True)
    srcstudentid = ('SrcStudentId', Integer)
    firstname = Column('FirstName', String)
    middlename = Column('MiddleName', String)    
    lastname = Column('LastName', String)

class StudentScore(Base):
    __tablename__ = 'FactStudentScore'

    StudentKey = Column('StudentKey', Integer, ForeignKey('DimStudent.StudentKey'), primary_key = True)
    SchoolKey = Column('SchoolKey', Integer, ForeignKey('DimSchool.SchoolKey'), primary_key = True)
    PointsPossible = Column('PointsPossible', Integer)
    PointsReceived = Column('PointsReceived', Integer)

    student = relationship("Student", backref='studentscore')
    school = relationship("School", backref='studentscore')

我正在尝试查询某个特定的学校,加入StudentScore和Student,返回每个学生的一行,以及他们的分数和学校协会。最终,我将把它变成一个熊猫数据帧。有人可以提供一个明确的例子来说明这个吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

对于多对多关系,请使用secondary=... relationship()参数并将其指向关联表。看到 http://docs.sqlalchemy.org/en/latest/orm/basic_relationships.html#many-to-many以获得完整的示例。

如果联结表包含其他数据,则具有关联对象和关联代理的更高级模式会使客户端代码相对直接。有关与原始问题中提供的案例类似的示例,请参阅http://docs.sqlalchemy.org/en/latest/orm/extensions/associationproxy.html