flask搜索

flask后端代码

from flask import Flask,render_template,abort
from flask_sqlalchemy import SQLAlchemy
import pymysql
import datetime
pymysql.install_as_MySQLdb()

app = Flask(__name__)


# 设置连接数据库的URL
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:123456@127.0.0.1:3306/db_flask'

# 数据库和模型类同步修改
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

# 查询时会显示原始SQL语句
app.config['SQLALCHEMY_ECHO'] = True

db = SQLAlchemy(app)



class Category(db.Model):
    __tablename__ = 'tbl_category'
    id = db.Column(db.Integer,primary_key=True)#告诉它这是一个主键
    name = db.Column(db.String(32),nullable=False)#告诉它默认值不能为null
    news = db.relationship('News',backref='category')
    #加上这个之后,查询的话可以直接点
    #分类查文章的话直接 category.news 表示查询这个分类下的所有文章
    #然后 news.category  表示查询这个文章的分类

class News(db.Model):
    __tablename__ = 'tbl_news'
    id  = db.Column(db.Integer,primary_key=True)
    title = db.Column(db.String(37),nullable=False)
    created_time = db.Column(db.DateTime,default=datetime.datetime.now())
    cate_id = db.Column(db.Integer,db.ForeignKey('tbl_category.id'))
    #一对多

@app.route('/')
def index():
    #cats =  Category.query.all()
    cat = Category.query.get(id)
    if not cat:
        abort(404)
    else:
        news = cat.news
    ctx = {
        'cats':news
    }
    return render_template('12index.html',**ctx)

@app.route('/cat/<int:id>/')
def cat(id):
   news = News.query.filter_by(cate_id=id).all()
   ctx = {
        'news':news
    }
   return render_template('12new.html', **ctx)

@app.route('/test')
def test():
    Category.query.get(1)#根据主键去查询,这个返回的是一个对象
    Category.query.filter_by(id=1).all()#列表形式返回,前端需要遍历
    Category.query.filter_by(id=1,name='娱乐').all()#根据两个条件来查(两个条件都必须满足)

    #或者查询(满足其中一个条件就可以)
    from sqlalchemy import or_
    Category.query.filter(or_(Category.id == 1,Category.name=='科技')).all()

    Category.query.filter_by(id=1,name='娱乐').first()#返回一个对象,不需要遍历
    #filter查询的写法,必须得加上类名. ==
    Category.query.filter(Category.id == 1).all()#列表

    #filter可以支持复杂查询
    Category.query.filter(Category.name.startswith('科技')).all()
    #表示以科技开头

    Category.query.offset(1).all()
    #表示跳过第一条数据,查询除了第一个数据之外所有的数据

    Category.query.offset(0).limit(1).all()
    #表示跳过第一条数据,返回至少一条数据

    Category.query.order_by(Category.id.desc().offset(1).limit(1)).all()
    #表示倒叙查找,先倒再查


    # 分类
    from sqlalchemy import func
    db.session.query(News.cate_id,func.count(News.cate_id)).group_by(News.cate_id).all()

    #模糊查询
    Category.query.filter_by(Category.name.contains('娱乐')).all()




    return '查询其他'

if __name__ == '__main__':
    # db.drop_all()#全部删除
#     # db.create_all()#表示重新创建
#     # cat = Category(name='科技')
#     # cat1 = Category(name='娱乐')
#     #
#     # #db.session.add(cat)#添加单个数据
#     # #添加多个数据
#     # db.session.add_all([cat,cat1])
#     #
#     # db.session.commit()
#     # #先提交,让这个表先生成id,然后新闻才能够点出来数据
#     #
#     # #给新闻添加数据
#     # new =  News(title='科技前沿',cate_id=cat.id)
#     # new2 =  News(title='一起来吃瓜',cate_id=cat1.id)
#     # db.session.add_all([new,new2])
#     # db.session.commit()
        app.run(debug=True)

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% for cat in cats %}
    <li><a href="/cat/{{ cat.id }}">{{ cat.name }}</a></li>
{% endfor %}
</body>
</html>

new.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% for new in news %}
    <li><a>{{ new.title }}</a></li>
{% endfor %}
</body>
</html>

运行结果:

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值