簡體   English   中英

執行插入查詢但未將數據添加到表中

[英]Insert query is executed but data is not added into table

我正在嘗試從 Flask 應用程序在 heroku postgres db 上的表中插入數據。 查詢正在執行,但表上沒有顯示結果。

如果我犯了任何錯誤,請告訴我。 謝謝!

路線文件(書頁[帖子]):

import os

from flask import Blueprint, render_template, request, flash, redirect, url_for
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from flask_login import login_required, current_user

main = Blueprint('main', __name__)

engine = create_engine(os.getenv("DATABASE_URL"))
db = scoped_session(sessionmaker(bind=engine))


@main.route("/")
def index():
    return render_template('index.html')


@main.route("/home")
@login_required
def home():
    book = ""
    return render_template('home.html', name=current_user.name, book=book)


@main.route("/home", methods=['POST'])
@login_required
def home_post():
    isbn = '%' + request.form.get('isbn') + '%'
    title = '%' + request.form.get('title') + '%'
    author = '%' + request.form.get('author') + '%'
    if isbn is None and title is None and author is None:
        flash('Please enter atleast one info of book')
    books = []
    if isbn is not None:
        q1 = db.execute("SELECT title FROM bookinfo WHERE isbn LIKE (:isbn)", {"isbn": isbn}).fetchall()
        if len(q1) < 4999:
            books.append(q1)
    if title is not None:
        q2 = db.execute("SELECT title FROM bookinfo WHERE title LIKE (:title)", {"title": title}).fetchall()
        if len(q2) < 4999:
            books.append(q2)
    if author is not None:
        q3 = db.execute("SELECT title FROM bookinfo WHERE author LIKE (:author)", {"author": author}).fetchall()
        if len(q3) < 4999:
            books.append(q3)
    if not books:
        flash('No book found with given info')
    else:
        return render_template('home.html', book=books)
    return redirect(url_for('main.home', name=current_user.name))


@main.route("/bookpage")
def bookpage():
    data = []
    review_data = []
    return render_template('bookpage.html', data=data, review=review_data)


@main.route("/bookpage", methods=['POST'])
def bookpage_post():
    title = request.form.get('title')
    data = []
    review_data = []
    rating = request.form.get('rating')
    reviews = request.form.get('review')
    bk_title = request.form.get('bk_title')
    if request.method == 'POST':
        if request.form.get('submit') == 'Get Details':
            if title is not None:
                q1 = db.execute("SELECT isbn, title, author, year FROM bookinfo WHERE title = (:title)",
                                {"title": title}).fetchall()
                q2 = db.execute("SELECT rating, review FROM reviews WHERE title = (:title)",
                                {"title": title}).fetchall()
                data.append(q1)
                if q2 is not None:
                    review_data.append(q2)
                    if len(review_data[0]) == 0:
                        review_data.clear()
                        review_data.append([('No Rating', 'No Reviews')])
        if request.form.get('submit') == 'Submit Review':
            if rating is not None and reviews is not None:
                db.execute("INSERT INTO reviews (title, rating, review) VALUES (:title, :rating, :review)",
                           {"title": bk_title, "rating": rating, "review": reviews})
                flash('Review Submitted')
            else:
                flash('Error')
    return render_template('bookpage.html', data=data, review=review_data, rating=rating, reviews=reviews)

html頁面:

{% extends 'index.html' %}

{% block content %}
<div class="box">
    {% with messages = get_flashed_messages() %}
    {% if messages %}
    <div class="alert alert-primary" role="alert">
        {{ messages[0] }}
    </div>
    {% endif %}
    {% endwith %}
    <form action="/bookpage" method="POST">
        <input type="text" id="result" name="title" readonly>
        <input type="submit" value="Get Details" name="submit"><br><br>
        <br><br>
        {% for d in data[0] %}
        <h2>ISBN: </h2>
        <h3>{{ d[0] }}</h3><br>
        <h2>Title: </h2>
        <h3>{{ d[1] }}</h3><br>
        <h2>Author: </h2>
        <h3>{{ d[2] }}</h3><br>
        <h2>Year: </h2>
        <h3>{{ d[3] }}</h3><br>
        <h2>Rating: </h2>
        <h3>{{ review[0][0][0] }}</h3><br>
        <h2>Reviews: </h2>
        <h3>{{ review[0][0][1] }}</h3><br>
        {% endfor %}
    </form>
    <form action="/bookpage" method="POST" id="review">
        <h5 align="left">Review:</h5>
        <input type="range" min="1" max="5" value="3" name="rating" class="slider" id="myRange"><br>
        <h6 align="left">&nbsp;1&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;2&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;3&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;4&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;5</h6>
        <input id="result1" name="bk_title">
        <textarea rows="4" cols="50" name="review" form="review"></textarea>
        <input type="submit" value="Submit Review" name="submit">
    </form>
</div>
{% endblock %}

output提交后查詢: html頁面報錯:表視圖

您應該只one method for one route 您正在2 methods for route /bookpage

遵循的標准:

如果您想為不同類型的請求(即GET, POST, etc )路由/bookpage ,您可以為該路由定義一個方法並使用if-else conditions處理當它是GET request-type時要執行什么邏輯以及要執行什么邏輯當它是POST request-type時執行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM