2017-02-09 119 views
0

我有一個站點,用戶可以將消息發佈到牆上並回複評論線程中的消息。當提交評論表單時,我無法弄清楚如何將註釋與消息相關聯,以便將正確的message_id(外鍵)插入到數據庫的註釋表中。Flask,SQL,HTML:如何使用變量作爲INSERT語句的鍵

我有一個顯示來自數據庫的消息和評論for循環在我的HTML,和每個消息/評論組後,有一種形式,路線「/ 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。

如何讓表單知道它屬於哪個消息,然後如何將這些信息傳遞給我的路由中的查詢?

回答

0

如果將message_id設置爲自動增量,則會更好。

如果你不能,使用MAX得到最後的ID,然後增加1.它不是最乾淨的,但它的工作原理。 SELECT MAX(message_id) AS last_message_id FROM comments;

+0

對不起,這不是我要找的。 message_id已經存在,我只想知道它是什麼,所以我可以使用它。當我將消息回覆(評論)推送到評論表時,我想將評論與原始消息相關聯。換句話說,我只想檢索原始郵件的ID,以便我可以將其包含在我的INSERT語句中以用於回覆(評論) –

+0

@KristaP抱歉!完全向後讀你的問題。你不能只是添加一個隱藏的輸入與message_id? – winterfruit