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'))