簡體   English   中英

在查詢結果中添加相關列?

[英]Adding related column to query results?

I have a setup in SQLAlchemy ORM (using Flask-SQLAlchemy) with Book and BookSubject classes, the latter being a many-to-many relationship (there is, of course, a Subject class, but it's not relevant to this question). 我有一個工作查詢,可根據主題添加到數據庫的日期返回所有書籍(這是有原因的):

 records = Book.query.\
        filter(BookSubject.book_id == Book.id).\
        filter(BookSubject.subject_id.in_([1, 12, 17])).\
        filter(BookSubject.created > '2021-01-01').\
        order_by(db.desc(BookSubject.created)).\
        paginate(page, 50, True)

然后我將records傳遞給 Jinja2 模板並做各種事情來顯示它; 它完美地工作。

我現在想做顯而易見的事情並實際顯示創建日期(即BookSubject.created ,來自 order_by 子句),但我不知道如何將其添加到查詢中。 放入add_columns((BookSubject.created).label("added"))不是答案; 當我嘗試使用其中一個記錄對象“'sqlalchemy.util._collections.result object'沒有屬性'id'”時會引發錯誤。 生成它的模板代碼(大致)是:

{% for book in records.items %}
  <tr><td><a href="{{ url_for('fullview', id=book.id) }}">{{ book.title }}</a></td></tr>
{% endfor %}

這應該是顯而易見的; 我如何將其添加到結果中?

通過使用add_columns

Book.query.add_columns((BookSubject.created).label("added"))

它將返回一個帶有字段Bookadded的命名元組,因此要訪問 book 字段,您需要類似book.Book.id

{% for book in records.items %}
  <tr><td>
     <a href="{{ url_for('fullview', id=book.Book.id) }}">{{ book.Book.title }} {{ book.added }} </a>
  </td></tr>
{% endfor %}

或成對迭代:

{% for book, added in records.items %}
  <tr><td>
     <a href="{{ url_for('fullview', id=book.id) }}">{{ book.title }} {{ added }} </a>
  </td></tr>
{% endfor %}

如果您想要一個平面結構(並且沒有add_columns ),那么您可以使用

session.query(
  Book.id,
  Book.title,
  BookSubject.created.label('added')
).filter(BookSubject.book_id == Book.id)...

然后 results 將有一個包含字段idtitleadded的命名元組,因此您可以直接打印book.id

{% for book in records.items %}
  <tr><td>
    <a href="{{ url_for('fullview', id=book.id) }}">{{ book.title }} {{ book.added }} </a>
  </td></tr>
{% endfor %}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM