Flask SQLAlchemy通过一个查询获取具有子级的父级
具有: 我如何可能通过一个查询获得此结果:Flask SQLAlchemy通过一个查询获取具有子级的父级,flask,sqlalchemy,flask-sqlalchemy,Flask,Sqlalchemy,Flask Sqlalchemy,具有: 我如何可能通过一个查询获得此结果: from app import db from sqlalchemy.dialects.postgresql import JSON from sqlalchemy.orm import relationship from sqlalchemy import ForeignKey from dataclasses import dataclass @dataclass class Parent(db.Model): __tablename__
from app import db
from sqlalchemy.dialects.postgresql import JSON
from sqlalchemy.orm import relationship
from sqlalchemy import ForeignKey
from dataclasses import dataclass
@dataclass
class Parent(db.Model):
__tablename__ = 'parent'
id = Column(Integer, primary_key=True)
children = relationship("Child", lazy='joined')
@dataclass
class Child(db.Model):
__tablename__ = 'child'
id = Column(Integer, primary_key=True)
parent_id = Column(Integer,ForeignKey('parent.id'),nullable=False)
如果我这样做,它会打印所有的子项,但不会将其包含在响应中
[
Parent {
...
child: Child
},
Parent {
...
child: Child
}
]
(这是一个示例,它假设“订单”是模型上的关系对象。)
如注释中所述,您可以直接在模型上将其定义为具有“lazy”属性的关系的默认行为。您是否尝试过
children=relationship(“Child”,lazy='joined'))
如前所述?假设我不需要重新运行迁移,它不会改变任何事情。我用更准确的代码更新了我的问题。我在进行连接加载时经常使用这种精确的方法(尽管在许多情况下会返回—一堆较小的查询比一个较大的查询更快)。我确实注意到了一件事——为什么您的模型要用dataclass注释?我一点也不确定这种魔法会如何与sqlalchemy魔法结合。。。不管怎样,测试片段的实际输出是什么?包括“print children”部分和jsonify版本。谢谢你的回答,但在我的例子中它不起作用。我更新了添加导入的问题以及模型的外观。
parents = Parent.query.options(joinedload(Parent.children)).all()
for parent in parents:
print("CHILDREN: ", parent.children.all())
return make_response(jsonify(parents))
from sqlalchemy.orm import joinedload
query(User).options(joinedload(User.orders))