【问题标题】:try to create a search using flask and flask_sqlachemy尝试使用 flask 和 flask_sqlachemy 创建搜索
【发布时间】:2020-05-08 05:41:46
【问题描述】:

我尝试创建一个烧瓶搜索,但是当它没有显示任何错误时,它总是没有显示任何结果 这是我在 app.py 中的代码

@app.route("/search", methods=['GET', 'POST'])
def shearch():
    if request.form == 'POST':
        search = request.form.get("search")
        results = Books.query.filter_by(search=request.form.search).all
        return render_template('search.html', results=results, search=search)
    return render_template('search.html')

在html文件中

<form class="search" action="/search" method="post">
    <fieldset class="search">
        {{ form.search.label }} {{ form.search(placeholder='search') }}
    </fieldset>

    <div class="submit-button">
        {{ form.submit }}
    </div>

    <table>
        {% if not results|length %}
        <h6> No results found. Please try again.</h6>
        {% else %}
        <tr>
            <th>isbn</th>
            <th>title</th>
            <th>author</th>
            <th>year</th>
        </tr>
        {% for result in results %}
        <tr>

            <th><a href="api/{{result['isbn']}}"> {{result['isbn']}}</th>

            <th><a href="books/{{result['title']}}"> {{result['title']}}</th>

            <th> {{result['author']}}</th>

            <th> {{result['year']}}</th>

        </tr>
        {% endfor %} {% endif %}


    </table>

它根本没有显示任何结果 我在 app.py 文件中尝试了另一种方式

if request.method == 'POST':
        search = str(form.search.data)
        results = Books.query.filter((Books.title, Books.author, Books.year, Books.isbn).like(search=form.search.data)).all()
        return render_template('search.html', results=results, search=search, form=form)

【问题讨论】:

  • 首先使用print() 看看你从数据库中得到了什么。也许它给出了空的结果。
  • 顺便说一句:在第一个版本中,all() 不应该是 () 吗?
  • 你应该使用print()search) 来查看你从search = request.form.get("search") 得到了什么。而是你应该在filter_by(search=search)中使用search而不是request.form.search
  • 谢谢你帮助打印(搜索)显示没有,当我托盘将其更改为 results = Books.query.filter_by(search=search).all() 但它引发了另一个错误(sqlalchemy.exc.InvalidRequestError:实体'main.Books'>' 没有属性 'search')
  • 也许您应该使用数据库中的列名,而不是 search - filter_by(column_name=search)。你应该检查你的模板是否生成&lt;input ... name="search"&gt;,它以request.form.get("search")发送代码中可用的数据

标签: python flask search flask-sqlalchemy


【解决方案1】:

我修好了 特别感谢 furas 和我的一个朋友 代码应该是

    form = SearchForm()
    search = form.search.data
    if request.method == 'POST':
        search = form.search.data
    search = search.strip() 
    results = Books.query.filter(or_(Books.title.ilike(f'%{search}%'), Books.author.ilike(f'%{search}%'), Books.year.ilike(f'%{search}%'), Books.isbn.ilike(f'%{search}%'))).all()

     return render_template('search.html', results=results, form=form, search=search)
    return render_template('search.html', form=form, search=search)

这将修复它并在数据库中搜索

【讨论】:

    猜你喜欢
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    相关资源
    最近更新 更多