问题描述
用Flask实现简单搜索功能主要是通过form的方式传值,再到数据库中查询。下面是数据库的内容,主要是实现对content进行模糊匹配。
图 1 数据库内容
解决方案
1.首先打开pycharm,构建一个最简单的flask应用。
#search.pyfrom flask import Flaskapp = Flask(__name__)@app.route("/")def index(): return render_template('search.html')if __name__ =="__main__": app.run() |
---|
2.其次,连接数据库进行搜索,要引入SQLAlchemy包。
代码示例:
#search.pyfrom 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.pyfrom flask import Flask, config, render_template, request, flash, url_for, sessionfrom 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> |
---|