首页 > 解决方案 > 存储在数据库 Flask 列上的多个变量

问题描述

我正在为运输公司开发一个应用程序,在客户页面上,我们可以添加送货之旅,这些送货之旅可以在不同的日期和时间安排:

例子:

计划于周一下午 4 点和周四上午 10 点进行送货之旅。

目前,我将其以 JSON 格式存储在我的 SQLAlchemy Delivery Tour 数据库中,如下所示:

{'星期一':10,'星期四':16}

但问题是,当我渲染 HTML 文件时,我无法成功地遍历 JSON 文件,并且无法将正确的日期和时间与正确的交付之旅相关联......

在此处输入图像描述

所以我想知道有没有更有效的方法来做到这一点?就像可能创建一个新表,但我不知道如何排列列。

编辑

我的 HTML:

<div class="card">
            <div class="card-header-spe"> 
                <p style="text-align:left;">
                    Delivery Tour
                    <span style="float:right;">
                        <a class=" card-category btn btn-primary" href="{{ url_for('deliver', client_id=client.id )}}">Add New</a>
                    </span>
                </p>
            </div>
            <table class="table table-striped table-hover">
                <thead>
                    <tr>
                    <th scope="col">Title</th>
                    <th scope="col">Description</th>
                    <th scope="col">Schedule</th>
                    <th scope="col">Driver</th>
                    </tr>
                </thead>

                <tbody>

                    <tr>   
                        {% for deliv in delivery %}
                            <th scope="row">{{ deliv.title }}</th>
                            <td>{{ deliv.description }}</td>
                            <td >{{ deliv.schedule }} </td>
                            {% if deliv.driver_assigned %}
                                {% for d in driver %}
                                    {% if d.id == deliv.driver_assigned %}
                                    <td>{{d.first_name}}</td>
                                    {% endif %}
                                {% endfor %}
                            {% else %}
                                <td></td>
                            {% endif %}
                    </tr>
                        {% endfor %}


                </tbody>
            </table>
        </div>

这是我的交付数据库的照片: 在此处输入图像描述

标签: pythonflasksqlalchemy

解决方案


您已经具备了它的基础知识:

{% for day, hour in eval(deliv.schedule).items() %}

您必须执行 eval ,因为除非我错了,否则您将该列作为字符串存储在表中。

如果是我,我会为时间表创建一个表,并与您的 delivery_tour 表建立一对多的关系:(注意:将 schedule 列放在您的 delivery_tour 表上)

class TourSchedule(Base):
    __tablename__ = 'tour_schedules'
    id = Column(Integer, primary_key=True)
    tour_id = Column(Integer, ForeignKey('delivery_tour.id'))
    tour = relationship('DeliveryTour', backref='schedule')
    day = Column(String(16))
    hour = Column(Integer)

然后你可以像其他方式一样迭代它:

<td>
    <ul style="list-style-type: none;">
        {% for sched in deliv.schedule %}
            <li>{{sched.day}}: {{sched.hour}}</li>
        {% endfor %}
    </ul>
</td>

推荐阅读