抱歉,这听起来很愚蠢,但我正在尝试为作家准备所有书籍。这就是我所拥有的:
class Author(db.Model):
__tablename__='author'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
class Book(db.Model):
__tablename__='book'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String)
author_id = db.Column(db.Integer, ForeignKey('author.id'))
author_rel = relationship('Author', lazy='joined'), backref='book')
我有我的模式:
class BookSchema(Schema):
id = fields.Int()
name= field.Str()
class BookSchema(Schema):
id = fields.Int()
title = field.Str()
author = fields.Nested(Author)
因此,我可以与作者和作者一起检索书籍。 我需要在这里添加一个嵌套字段,其中包含每个作者的所有书籍……我一直在尝试,但是没有这样做。有没有自动的方法来获取这个?
我正在尝试在查询中联接表,但也失败了:
session.query(Author, Book).join(Book, Author.id == Book.author_id).all()
这给了我一个(作者,书)元组,我无法将其映射到一个简洁的json ...我该怎么做?
答案 0 :(得分:0)
我使用的解决方案是:
session = Session()
author_objects = session.query(Author).all()
schema = AuthorSchema(many=True)
author_list = schema.dump(author_objects).data
book_objects = session.query(Book).all()
schema = BookSchema(many=True)
book_list = schema.dump(book_objects).data
for index, author in enumerate(author_list):
author_list[index]['books'] = [book for book in book_list if book['author_id'] == author['id']]
session.close()
return jsonify(author_list)
这对我来说有点手册,我认为应该有一个更好的方法来使用模式自动执行此操作。毕竟,这是基于存在的关系。
这行得通,但是对于长列表来说会很慢...我更喜欢直接使用sql-alchemy +棉花糖...
想法?