首页 > 解决方案 > Flask SQLAlchemy 为 PostgreSQL 中的文本字段插入空值,尽管有文本

问题描述

books()方法中的命令基于已经有效的代码。INSERT INTO声明就是问题所在。提交 HTML 表单(屏幕底部)userreview时,尽管存在文本,但我的方法不会拉出输入字段中的文本框books()并将其插入到我的 postgres DB 中。为了检查 HTML 页面中的任何内容是否被正确拉入,我测试了 hidden book_id,它被该books()方法拉出并按预期插入到数据库中。

知道为什么这会坚决拒绝将输入字段中的文本提取到我的方法中并将其插入到我的数据库中吗?

@app.route("/books", methods=["POST"])
@login_required
def books():
    book_id = request.form.get("bookid")
    review = request.form.get("userreview")
    db.execute("INSERT INTO test (review, bookid) VALUES (:review, :bookid)", {"review": review, "bookid":book_id})
    db.commit()

{% block body %}

<div>
    <table class="table">
        <thead>
            <tr>
                <th><strong>Username</strong></th>
                <th><strong>Review</strong></th>
                <th class="text-center"><strong>Rating</strong></th>
            </tr>
        </thead>
        {% for review in reviews %}
        <tr>
            <td>{{ review.username }}</td>
            <td>{{ review.reviews }}</td>
            <td class="text-center">{{ review.rating }}</td>
        </tr>
        {% endfor %}
    </table>
</div>

<form action="{{ url_for('books') }}", method="post">
  <div class="form-group">
    <input name="userreview" type="text" class="form-control" id="bookreview">
    <input type="hidden" name="bookid" value="{{ books.id }}" />
  </div>
  <button type="button" class="btn btn-primary">Submit</button>
</form>

标签: postgresqlflaskflask-sqlalchemy

解决方案


这个 HTML 工作得很好,虽然我还没有弄清楚标记的哪一部分有所作为。我认为这是上面代码中的错误逗号<form action="{{ url_for('books') }}", method="post">,但这没有什么区别。

<form action="{{ url_for('books') }}" method="post">
    <fieldset>
        <div class="form-group">
            <input autocomplete="off" autofocus class="form control" name="userreview" type="text"/>
        </div>
        <div class="form-group">
            <input autocomplete="off" autofocus class="form control" name="bookid" value="{{ books.id }}" type="hidden"/>
        </div>
        <div class="form-group">
            <button class="btn btn-default" type="submit">Submit</button>
        </div>
    </fieldset>
</form>

推荐阅读