在sqlalchemy中进行自然连接
在sqlalchemy中,连接(join)是怎么工作的呢?
class Enrollments(Base):
__tablename__ = 'Enrollments'
StudentID = Column(INTEGER, ForeignKey('Student.StudentID'))
FinalGrade = Column(VARCHAR(3))
class Student(Base):
__tablename__ = 'Student'
StudentID = Column(INTEGER, primary_key=True)
Name = Column(VARCHAR(100))
EnrolledIn = relationship('Enrollments')
session.query(Student).join(Enrollments).all() #what isn't giving me what I expect
我本来期待这个操作能给我三列数据(学生ID、姓名、最终成绩、注册课程),但是它只给了我学生对象,没有附带应该有的注册信息,我哪里做错了呢?
1 个回答
2
每个 Student
对象都有一个与之关联的注册信息,叫做 student.EnrolledIn
。
不过,连接(joins)是用来查询数据的,而不是用来获取数据的;如果你想要提前加载这些信息,你需要
session.query(Student).options(joinedload(Student.EnrolledIn))
关于关系加载的详细说明可以在这里找到: http://docs.sqlalchemy.org/en/rel_0_9/orm/tutorial.html#eager-loading
顺便提一下,你可能想给对象的属性使用 snake_case
这种命名方式;因为 DromedaryCase
通常只用来命名类,所以用起来会让人有点困惑 :)