Flask,SQL,HTML:如何将变量用作INSERT语句的键

时间:2017-02-09 01:13:46

标签: python sql sqlalchemy

我有一个网站,用户将消息发布到墙上并回复评论主题中的消息。在提交评论表单时,我无法弄清楚如何将评论与消息相关联,以便将正确的message_id(外键)插入到数据库的评论表中。

我在html中使用for循环显示数据库中的消息和注释,并且在每个消息/注释组之后都有一个路由到'/ post_comment'的表单:

{% for message in messages %}
<div>
    <h3>{{ message['first_name'] }} {{ message['last_name']  }}</h3>
    <h3>{{ message['created_at'] }}</h3>
    <p>{{ message['message'] }}</p>
    {% for comment in comments %}
            {% if message['message_id'] == comment['message_id'] %}
            <p>{{ comment['comment'] }}</p>
            {% endif %}
    {% endfor %}
    <form  class="comments" action="/post_comment" method="POST">
        <h4>Reply</h4>
        <textarea id="post_comment" type="textarea" name="comment"></textarea>
        <input class="submit" type="submit" value="Post">
    </form>
 </div>
{% endfor %}

并且/ post_comment路由如下所示:

@app.route('/post_comment', methods=['POST'])
def post_comment():
    query = "INSERT INTO comments (user_id, message_id, comment, created_at, updated_at) VALUES (:user_id, :message_id, :comment, NOW(), NOW())"
    data = {
         'user_id': session['id'],
         'message_id': 10,     <<<<<<<<<<<<<<<<<<<<<<<<<<<< WHAT GOES HERE?
         'comment': request.form['comment']
        }
    mysql.query_db(query, data)
    return redirect('/wall')

这一切都很好,但正如你所看到的,在/ post_comment路由中我暂时将“message_id”硬编码为整数(10),因此每条评论都被记录为对message_id的回复10.实际上它是什么需要做的是在提交相关评论表时提取前一条消息的message_id。

如何让表单知道它所属的邮件,然后如何在我的路线中将该信息传递给我的查询?

1 个答案:

答案 0 :(得分:0)

如果将message_id设置为自动增量,则会更好。

如果你不能,使用MAX获取最后一个ID,然后将其增加1.它不是最干净的,但它有效。 SELECT MAX(message_id) AS last_message_id FROM comments;