ユーザーが検索を絞り込むことができる特定のクエリを作成しようとしています。著者と本の間には1対多の関係があります。
class Author(Model):
id = Column(Integer, primary_key=True)
name = Column(String)
books = relationship('Book', backref='author', lazy='dynamic')
class Book(Model):
id = Column(Integer, primary_key=True)
title = Column(String)
pages = Column(Integer, default=0)
is_published = Column(Boolean, default=False)
author_id = Column(Integer, ForeignKey('author.id'))
この質問に答えるFlasksqlalchemyで適切なクエリを作成するにはどうすればよいですか?
「少なくとも1冊の本を出版しているすべての著者を教えてください。すべての著者を本のページ数で短いものから長いものの順に並べ替えてください。」
他にもっと長い本があるかどうかに関係なく、著者は最短の本だけでソートされると思います。
例:
Bob
book A: 62 pages, published
book B: 10 pages, published
Alice
book C: 100 pages, published
book D: 1 pages, published
Carol
book E: 3 pages, NOT-published
book F: 1000 pages, published
Eve
book G: 2000 pages, NOT-published
クエリは、次の順序で作成者を返します。
[ Alice, Bob, Carol ]
アリスの出版本は最短(1ページ)であるため、ボブの出版本は2番目に短く(10ページ)、キャロルの出版本は最長(1000ページ)です。イブは出版された本を持っていないので言及されません。
次のことを試してください。
session.query(Author)
.join(Author.books)
.filter(Book.is_published == True)
.group_by(Author.id)
.order_by(func.min(Book.pages))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加