Опрос SQLAlchemy в колбе между двумя таблицами - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь создать запрос как:

SELECT Book.title, Opinion.body  
FROM Book,Opinion  
WHERE Opinion.book_id = Book.id

но в SQLAlchemy. Я хочу показать все мнения о книге и отобразить ее на веб-странице.

models.py:

class Opinion(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    body = db.Column(db.String(140))
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    book_id = db.Column(db.Integer, db.ForeignKey('book.id'))

    def __repr__(self):
        return '<Post {}'.format(self.body)

class Book(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(255), index=True)
    description = db.Column(db.String(255))
    author = db.Column(db.String(255))
    pages = db.Column(db.Integer)
    opinions = db.relationship('Opinion', lazy='dynamic')

Я могу создать запрос, который будет возвращен только для 1 книги, но не для всех. Я попробовал это:

result = Opinion.query(Book.id, Opinion.body).filter_by(Opinion.book_id = Book.id).all()

Но это все еще не работает. Может ли кто-нибудь помочь мне с этим?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018
@app.route('/detail_book/<title>')
def detail_book(title):
    book = Book.query.filter_by(title=title).first_or_404()
    result = db.session.query(Book.id,Opinion.body).filter(Opinion.book_id==book.id).filter(and_(Book.title == title)).all()
    return render_template('detail_book.html', book=book, result=result)

Работает как надо

0 голосов
/ 08 ноября 2018

В качестве альтернативы вы можете запросить и отобразить результаты, как показано ниже.

book = Book.query.get(book_id)
opinions = book.opinions.all()

В ваших шаблонах визуализируйте их следующим образом:

{{ book.title }}
{% for item in opinions %}
    {{ item.body }}
{% endfor %}
...