[英]Flask SQLAlchemy querying beetwen 2 tables
I'm trying to create query like: 我正在尝试创建如下查询:
SELECT Book.title, Opinion.body
FROM Book,Opinion
WHERE Opinion.book_id = Book.id
but in SQLAlchemy. 但在SQLAlchemy中。 I want to show all opinions for book and display it on web page.
我想显示所有关于书的意见并将其显示在网页上。
models.py: 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')
I can create query where is only return for 1 book, but not for all. 我可以创建查询,其中仅返回1本书,而不是全部返回。 I tried this:
我尝试了这个:
result = Opinion.query(Book.id, Opinion.body).filter_by(Opinion.book_id = Book.id).all()
But it still doesnt work. 但是它仍然不起作用。 Can someone help me with this?
有人可以帮我弄这个吗?
@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)
It works as it should 它应该工作
Alternatively you can query and render the results as shown below. 或者,您可以查询和呈现结果,如下所示。
book = Book.query.get(book_id)
opinions = book.opinions.all()
In your templates render them as follows: 在您的模板中,按如下所示进行渲染:
{{ book.title }}
{% for item in opinions %}
{{ item.body }}
{% endfor %}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.