炼金术查询

2024-10-03 21:24:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我用米格尔·格林伯格的优秀教程创建了一个Flask项目。我正在修改示例代码以创建自己的站点。你知道吗

我的数据库里有两张桌子。司机和车队。我已经建立了一对多的关系型号.py我想输出一个车手和他们所属车队的列表。我已经包括了路线.py以及显示结果的html文件。你知道吗

中的查询路线.py如果我在查询中指定了一个驱动程序,则可以正常工作,但是当我尝试驱动程序.query.all(),它不返回网页上的任何数据。你知道吗

注意=我在Python Shell中运行了

^{pr1}$,得到了正确的响应,只有在尝试在web页面上实现解决方案时,我才会遇到问题。

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
>>> 

你知道吗型号.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)

你知道吗路线.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)

你知道吗驱动程序详细信息.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 %}

如果你能告诉我哪里出了问题,我将不胜感激。你知道吗


Tags: inpyselfdividfordbhtml