python - 是否有 "if command"来识别我的 sqlalchemy sqlite 查询命令是否为空?

标签 python sql sqlite flask sqlalchemy

我有以下代码:

many_posts = BlogPost.query.filter(or_((BlogPost.problem_name.ilike("%" + form.search.data + "%")),(BlogPost.text.ilike("%" + form.search.data + "%")))).order_by(BlogPost.date.desc()).paginate(page=page, per_page=10)

return render_template('blog_search_result.html', id_list=id_list, many_posts=many_posts, no_posts=no_posts)

这是一个sqlalchemy 查询命令,它允许我网站上的用户搜索/过滤和查询博客。但有时,他们提供的输入不在数据库中,我的网站不会显示任何内容。因此,我不想显示任何内容,而是想显示一条文字:“找不到与您的搜索相关的内容”。 我想知道是否有任何“if语句”Python/Sqlalchemy代码可以用来识别我的查询命令是否没有找到任何信息,然后显示上面的引用。类似:

        if many_posts is null:
            no_posts= "Couldn't find relating problems with your search"

与 Many_posts 连接的部分 HTML 代码:

    <h4>Search results<span class="iconify" data-icon="icons8:search" data-inline="false"></span>:</h4>
    <p>{{ no_posts }}</p>


<div class="container row row-cols-1 row-cols-md-2 text-center">
{% for post in many_posts.items%}

    <div class="card border-dark mb-3 " style="width: 20rem;">
     <div class="card-body ">
         <h7><a class="text-warning" href="{{ url_for('users.user_posts', username=post.creator.first_name+post.creator.middle_name+post.creator.last_name) }}"><img class="text-center rounded" src="{{ url_for('static', filename='profile_pics/'+ post.creator.profile_image) }}" width = "35" height = "35" alt=""> {{ post.creator.first_name}} {{ post.creator.middle_name }} {{ post.creator.last_name }}</a></h7>
         <p></p>
         <img class="text-center rounded responsive1" alt="" src="{{ url_for('static', filename='blog_pics/'+ post.blog_image) }}" width = "495" height = "250">
         {# Need caution for post.blog_image on the code above #}
         <p></p>
         <h2><a class="card-tittle text-body problem" href="{{ url_for('blog_posts.blog_view', blog_validated_id=post.blog_id) }}">{{ post.problem_name[0:40]}}..</a></h2>
         <p class="card-text">{{ post.text[0:100] }}</p>
         <p><small class="text-muted">Posted on: {{ post.date.strftime('%Y-%m-%d') }}</small></p>
         <a class="btn btn-warning" href="{{ url_for('blog_posts.blog_view', blog_validated_id=post.blog_id) }}">Read more</a>
     </div>

我是编码初学者,如果您能帮助我,我将不胜感激。谢谢!

==========================答案/解决方案================= ========

我使用以下代码:

方法一:

 many_posts0 = BlogPost.query.filter(or_((BlogPost.problem_name.ilike("%" + form.search.data + "%")),(BlogPost.text.ilike("%" + form.search.data + "%")))).order_by(BlogPost.date.desc())

        many_posts = many_posts0.paginate(page=page, per_page=10)
        num_posts = many_posts0.count()
        if num_posts == 0:
            no_posts="Couldn't find relating problems"
        else:
            no_posts=''

return render_template('blog_search_result.html', id_list=id_list, many_posts=many_posts, num_posts=num_posts, no_posts=no_posts)

在 HTML 中,我使用:

<p>{{no_posts}}</p>

方法2:

many_posts = BlogPost.query.filter(or_((BlogPost.problem_name.ilike("%" + form.search.data + "%")),(BlogPost.text.ilike("%" + form.search.data + "%")))).order_by(BlogPost.date.desc()) 
no_posts = ''

if not many_posts.first():
   no_posts= "Couldn't find relating problems with your search"
many_posts = many_posts.paginate(page=page, per_page=10)

最佳答案

不确定,但您可以尝试两件事:

如果没有返回行,查询结果可能不会计算为False。空列表的计算结果为 False,但查询结果可能是不同类型的对象,并且可能不会计算为 False。 转换为列表可能会有所帮助。

return render_template('blog_search_result.html', id_list=id_list, posts=list(posts))

用于调试目的。您可以添加以下内容。 打印/记录对于理解很有帮助

print("Posts is ", posts, "and as bool it returns ", bool(posts))
return render_template('blog_search_result.html', id_list=id_list, posts=list(posts))

首次反馈后

好的,SqlAlchemy paginate() 的输出不可迭代。 (你是否尝试阅读 paginate 的文档。它可能会提到是否有一些关于结果数量的信息)

以下可能适用于 SqlAlchemy(我没有时间尝试)

posts_to_show = BlogPost.query.filter(or_((BlogPost.problem_name.ilike("%" + form.search.data + "%")),(BlogPost.text.ilike("%" + form.search.data + "%")))).order_by(BlogPost.date.desc())

post_page = posts_to_show.paginate(page=page, per_page=10)

num_posts = posts.count()  # there might be something better to find out if there is at least one post, but I don't know it

return render_template('blog_search_result.html', id_list=id_list, posts=posts_page, num_posts=num_posts)

关于python - 是否有 "if command"来识别我的 sqlalchemy sqlite 查询命令是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61904126/

相关文章:

使用 Docker 的 Python 脚本沙箱

python - 按值获取 numpy 数组中前 k 个数字的索引?

python - 执行不使用 Sidekiq 的简单 Python 脚本

java - Android Sqlite 选择查询值是否为零或 0

python - 如何从 Python 中的字节列表中获取最后一个字节项?

sql - 多维数据集维度处理的参照完整性错误

mysql - 如何在不删除 MySQL 数据的情况下删除分区?

mysql - SELECT 查询显示一次每条记录的名称和实例数

ionic 的 SQLite 数据库

android - 将 sqlite 数据库从 android studio 应用程序迁移到 Xamarin.Forms 应用程序