Python SQLAlchemy不起作用

Python SQLAlchemy不起作用,python,sql,database,sqlalchemy,Python,Sql,Database,Sqlalchemy,我试图让关系的加载工作,但对于经典的“调用循环中的数据库项”问题,即 users = Session.query(User).all() # SELECT * from users for user in users: foo(user.exams) # SELECT * from exams where user_id = ? 为了更好地加载,下面是我正在做的 首先,以下是我的模型定义: Base = declarative_base() class Users(Base):

我试图让关系的加载工作,但对于经典的“调用循环中的数据库项”问题,即

users = Session.query(User).all()  # SELECT * from users
for user in users:
    foo(user.exams)  # SELECT * from exams where user_id = ?
为了更好地加载,下面是我正在做的

首先,以下是我的模型定义:

Base = declarative_base()

class Users(Base):
    id = db.Column(db.Integer, primary_key=True)

class Exams(Base):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
    user = db.relationship(
        "Users",
        backref=sqlalchemy.orm.backref(
            'exams',
            cascade='all, delete-orphan'
        ),
        foreign_keys=[user_id]
    )
但是,当我实际检查原始sql时:

q = Session().query(Users).join(Users.exams).options(joinedload(Users.exams))
print str(q)
我得到(格式化):

当我真的期待的时候:

(SELECT exams.id, exams.user_id, users.id
 FROM users
 JOIN exams ON users.id = exams.user_id)
这样我就可以在不向数据库发送另一个查询的情况下进行
user.tests
。如何使加载工作正常进行?

应该是:

q = Session().query(Users).options(joinedload('exams'))

这仍然为我提供了原始SQL“SELECT users.id FROM users JOIN EXAMES ON users.id=EXAMES.user_id”:/I正在执行此操作。您是否希望获得结果,然后使用
.all()
Session().query(用户)。选项(joinedload('EXAMES')).all()
q = Session().query(Users).options(joinedload('exams'))