【问题标题】:Flask, SQL, HTML: How to use a variable as a key for INSERT statementFlask、SQL、HTML:如何使用变量作为 INSERT 语句的键
【发布时间】:2017-02-09 01:13:46
【问题描述】:

我有一个网站,用户可以在其中将消息发布到墙上并在评论线程中回复消息。我不知道在提交评论表单时如何将 cmets 与消息关联,以便将正确的 message_id(外键)插入到数据库中的 cmets 表中。

我在我的 html 中使用 for 循环显示来自数据库的消息和 cmets,并且在每个消息/评论组之后有一个路由到“/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。

如何让表单知道它属于哪条消息,然后如何将该信息传递给路由中的查询?

【问题讨论】:

    标签: python sql sqlalchemy


    【解决方案1】:

    最好将 message_id 设置为自动递增。

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

    【讨论】:

    • 对不起,这不是我要找的。 message_id 已经存在,我只想知道它是什么,以便我可以使用它。当我将消息回复 (cmets) 推送到 cmets 表时,我想将评论与原始消息相关联。换句话说,我只想检索原始消息的 id,以便可以将其包含在我的 INSERT 语句中以获取回复 (cmets)
    • @KristaP 对不起!完全向后阅读您的问题。你能不能只添加一个带有 message_id 的隐藏输入?
    猜你喜欢
    • 1970-01-01
    • 2017-11-09
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    • 2015-04-03
    相关资源
    最近更新 更多