【问题标题】:Flask SQLAlchemy Query烧瓶 SQLAlchemy 查询
【发布时间】:2018-01-31 10:52:01
【问题描述】:

我使用 Miguel Grinbergs 的优秀教程创建了一个 Flask 项目。我正在修改示例代码来制作我自己的网站。

我的数据库中有两个表。车手和车队。我在 models.py 中创建了一个一对多的关系,我想输出一个司机列表和他们所属的团队。我已经包含了 routes.py 和将显示结果的 html 文件。

如果我在查询中指定一个驱动程序,routes.py 中的查询可以正常工作,但是当我尝试 Drivers.query.all() 时,它不会在网页上返回任何数据。

注意 = 我已经运行了

Drivers.query.all()
在 Python Shell 中并且我得到了正确的响应,只有当我尝试在网页上实施解决方案时才会遇到问题。

Python Shell 的输出

>>> details = Driver.query.all()
>>> details
[<Driver Lewis Hamilton>, <Driver Kimi Raikkonen>, <Driver Max Verstappen>]
>>> for d in details:
...     print(d.driverName, d.driverTeam)
... 
Lewis Hamilton Mercedes
Kimi Raikkonen Ferrari
Max Verstappen Red Bull
>>> 

models.py

class Team(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    teamName = db.Column(db.String(64))
    teamDriver = db.relationship('Driver', backref='driverTeam', lazy='dynamic')

    def __repr__(self):
        return '{}'.format(self.teamName)


class Driver(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    driverName = db.Column(db.String(64))
    team_id = db.Column(db.Integer, db.ForeignKey('team.id'))

    def __repr__(self):
        return '<Driver {}>'.format(self.driverName)

routes.py

@app.route('/driverDetails', methods=['GET', 'POST'])
def driverDetails():
    ## Output works fine with one driver specified in query
    # details = Driver.query.filter_by(driverName='Kimi Raikkonen').first()

    ## No data is output when using query below
    details = Driver.query.all()
    return render_template('driverDetails.html',  title='Driver Details', details=details)

driverDetails.html

{% extends "base.html" %}

{% block content %}
    <h1>Driver Details</h1>
    <!-- Output works correctly for one driver as specified in query on routes.py
    <div><p>{{ details.driverName }} is in: <b>{{ details.driverTeam }}</b></p></div>
    -->

    <!-- However, when trying to iterate over whole list of drivers, output shows 
    the text "drives for:". But there is no data being populated from the db
    -->
    {% for d in details %}
    <div><p>{{ details.driverName }} drives for: {{ details.driverTeam }}</p></div>
    {% endfor %}
   {% endblock %}

我将不胜感激任何关于我哪里出错的建议。

【问题讨论】:

    标签: python flask jinja2 flask-sqlalchemy


    【解决方案1】:

    你的代码基本上是正确的,你只需要实际使用你绑定到d的对象:

    {% for d in details %}
    <div><p>{{ d.driverName }} drives for: {{ d.driverTeam }}</p></div>
    {% endfor %}
    

    【讨论】:

    • 啊,太棒了!非常感谢乔皮奇!不敢相信我自己没有注意到!
    猜你喜欢
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 2014-07-20
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多