要存储在数据库Flask列中的多个变量

时间:2019-01-24 00:12:14

标签: python flask sqlalchemy

我正在为运输公司开发一个应用程序,并且在客户端页面上,我们可以添加“交付之旅”,并且可以在不同的日期和时间计划这些交付之旅:

示例:

计划在周一的下午4点和周四的上午10点进行送货游览。

当前,我将其以JSON格式存储在我的SQLAlchemy Delivery Tour数据库中:

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

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

enter image description here

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

  

编辑

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

这是我的投放数据库的照片: enter image description here

1 个答案:

答案 0 :(得分:1)

您已经具备了基本知识:

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

您必须进行评估,因为除非我错了,否则您会将该列存储为表中的字符串。

如果是我,我会为时间表创建一个表,并与您的delivery_tour表建立一对多关系:(注意:放下 schedule < em>您的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>