分享

数据库|Flask实现简单搜索功能

 算法与编程之美 2020-08-08

问题描述

用Flask实现简单搜索功能主要是通过form的方式传值,再到数据库中查询。下面是数据库的内容,主要是实现对content进行模糊匹配。

图 1 数据库内容

解决方案

1.首先打开pycharm,构建一个最简单的flask应用。

#search.py

from flask import Flask

app = Flask(__name__)

@app.route("/")

def index():

    return render_template('search.html')

if __name__ =="__main__":

    app.run()

 2.其次,连接数据库进行搜索,要引入SQLAlchemy包。

代码示例:

#search.py

from flask_sqlalchemy import SQLAlchemy

app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://root:123456@127.0.0.1:3306/test?charset=utf8'

app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True #root用户名123456密码 test数据库

3.最后,需要从form表单拿到数据,进行数据库查询操作。

代码示例:

@app.route('/', methods=['post', 'get'])

def search():

    content = request.form.get('content') #需要查询的内容

    if content is None:

        content = " "

    quotes = Quotes.query.filter(Quotes.content.like("%"+content+"%")if content is not None else "").all() #查询跟content有关的数据,返回结果为列表

    return render_template('search.html',quotes = quotes) #将查询结果返回到前端

#search,html

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>Title</title>

</head>

<body>

<form method="post" action="{{url_for('search')}}">

    <input type="text" name="content" id="content" placeholder="请输入搜索内容">

    <input type="submit" value="搜索">

</form>

<div>

    <table border="1px" cellspacing="0px">

        {% for i in quotes %}

        <tr>

            <td>名字</td>

            <td>{{i.name}}</td>

            <td>内容</td>

            <td>{{i.content}}</td>

        </tr>

        {% endfor %}

    </table>

</div>

</body>

</html>

效果如下:

图 2、3 效果图

一个简单的查询功能就完成了,这里只是做了单条件模糊查询。接下来介绍多条件模糊查询和精确查询。

代码示例:

#多条件模糊查询

content = Quotes.query.filter(

     Quotes.id.like("%" + id + "%") if id is not None else "",

     Quotes.name.like("%" + name + "%") if name is not None else "",

     Quotes.content.like("%" + content + "%") if content is not None else ""

 ).all()

#单条件精确查询

content = Quotes.query.filter_by(id=id).all()

#多条件精确查询

content = Quotes.query.filter_by(id=id,name=name).all()

最后附上完整代码:

#search.py

from flask import Flask, config, render_template, request, flash, url_for, session

from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config.from_object(config)

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:1914571065lyj@127.0.0.1:3306/java2019?charset=utf8'

app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True

db = SQLAlchemy(app)

class Quotes(db.Model):

    id = db.Column(db.Integer, primary_key=True, comment='ID')

    name = db.Column(db.String(255), unique=True, comment='名称')

    content = db.Column(db.String(255), comment='内容')

@app.route('/', methods=['post', 'get'])

def search():

    content = request.form.get('content')

    if content is None:

        content = " "

    quotes = Quotes.query.filter(Quotes.content.like("%"+content+"%")if content is not None else "").all()

    return render_template('search.html',quotes = quotes)

if __name__ == "__main__":

    app.run(debug=True)

#search.py

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>Title</title>

</head>

<body>

<form method="post" action="{{url_for('search')}}">

    <input type="text" name="content" id="content" placeholder="请输入搜索内容">

    <input type="submit" value="搜索">

</form>

<div>

    <table border="1px" cellspacing="0px">

        {% for i in quotes %}

        <tr>

            <td>名字</td>

            <td>{{i.name}}</td>

            <td>内容</td>

            <td>{{i.content}}</td>

        </tr>

        {% endfor %}

    </table>

</div>

</body>

</html>


END

编       辑   |   王文星

责       编   |   刘玉江

 where2go 团队


微信号:算法与编程之美          

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多