python后端框架之flask05

1.模型类的映射管理
    1.什么是映射管理
        对模型类/实体类的修改允许再映射回数据库
    2.依托于第三方库完成管理
        1.flask-script
            pip3 install flask-script
            包:flask_script
            类:Manager
                作用:可以对项目进行管理,如:启动项目,添加命令
        2.flask-migrate
            pip3 install flask-migrate
            包:flask_migrate
            类:
                1.Migrate
                    作用:用于管理 app 和 db 之间的协调关系
                2.MigrateCommand
                    作用:允许在终端中提供实体类迁移的命令
    3.实现数据库的迁移
        1.python3 run01.py db init
            作用:做一些初始化的行为操作
            特点:一个项目中只执行一次就可以了
        2.python3 run01.py db migrate
            作用:将编写好的实体类生成中间文件
            特点:只要检测到实体类有修改,就会生成中间文件
        3.python3 run01.py db upgrade
            作用:将中间文件映射回数据库
2.ORM中的CRUD
    1.增加 - C(Create)
        1.创建实体的对象,并为属性赋值
            user = User()
            user.uname = 'wangwc'
            user.age = 18
        2.将实体对象增加回数据库
            db.session.add(实体对象)
            #针对非查询操作,必须要手动提交回数据库
            db.session.commit()
        3.配置操作自动提交
            针对所有非查询操作
            配置成功后,会在执行完视图之后,整体将行为提交回数据库
            app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True
    2.查询 - R(Retrieve)
        1.基于 db.session 进行查询
            1.db.session.query()
                该函数会返回一个Query对象,类型为BaseQuery
                该返回值中会包含针对某个实体或实体中的列所有的查询操作
                语法:
                    1.db.session.query(实体类)
                        查询对应实体类中所有列的数据
                        ex:
                            db.session.query(User)
                            等同于:select * from user
                    2.db.session.query(实体类.属性1,实体类.属性2)
                        查询对应实体类中部分列的数据
                        ex:
                            db.session.query(User.id,User.uname)
                            等同于:
                                select user.id,user.uname from user
            2.查询执行函数
                目的:在query()的基础上的得到最终的数据
                语法:db.session.query(xxx).查询执行函数()
                函数           说明
                all()          以列表的方式返回query()中所有的数据
                first()        以实体对象的方式返回query()中的第一条数据,如果没有结果,则返回None
                first_or_404() 效果同上,如果查询不到数据,则响应404
                count()        返回查询结果的数量
            3.查询过滤器函数
                作用:在db.session.query()的基础上,进行条件筛选
                语法:db.session.query().查询过滤器函数().查询执行函数()
                过滤器函数          说明
                filter()            按指定条件进行过滤
                filter_by()         按等值条件过滤时使用
                limit()             获取前几行数据
                order_by()          排序
                group_by()          分组

                过滤器函数的详解:
                1.filter()
                    作用:实现查询中的各种条件
                    注意:条件必须由 实体类.属性 构成
                    1.查询年龄大于17的user的信息
                        db.session.query(User).filter(User.uage>17).all()
                    2.查询年龄大于17并且id大于1的user的信息
                        db.session.query(User).filter(User.uage>17,User.id>1).all()
                    3.查询年龄大于17或者id大于1的user的信息
                        注意:查询 或 的操作,要借助于 or_()
                        用法:or_(条件1,条件2)
                        db.session.query().filter(or_(xxx)).all()
                    4.查询id的值为2的user的信息
                        注意:等值判断要用 == 
                        db.session.query().filter(User.id==2).first()
                    5.查询uemail中包含 w 的user的信息
                        select * from user where uemail like '%w%'
                        注意:模糊查询like需要使用实体类的属性所提供的like()完成查询
                        db.session.query(User).filter(User.uemail.like('%w%')).all()
                    6.模糊查询 - in
                        注意:模糊查询in需要使用实体类的属性所提供的in_()完成查询
                        db.session.query(User).filter(User.uage.in_([15,17,19])).all()
                    7.模糊查询 - between and
                        注意:模糊查询between and 需要使用实体类的属性所提供between(值1,值2)完成查询
                        db.session.query(User).filter(User.uage.between(13,15)).all()
                2.filter_by()
                    作用:只做等值条件筛选过滤,并且只用于单表查询
                    特点:
                        1.不用 实体类.属性名,直接使用 属性名即可
                        2.不用 == ,而用 = 
                    db.session.query(User).filter_by(id=1).first()
                3.limit()
                    作用:获取前几行数据
                    语法:db.session.query(User).limit(num).all()
                    1.db.session.query(User).limit(1).all()
                        获取前1条数据
                    2.使用 offset() 可以完成数据的偏移
                        db.session.query(User).limit(2).offset(3).all()
                        跳过前3条数据,再获取剩余的前2条数据
                4.order_by()
                    1.User表中的数据按id降序排序
                        db.session.query(User).order_by("id desc")
                    2.User表中的数据按年龄升序排序,id降序排序
                        db.session.query(User).order_by("age,id desc")

                练习:
                    1.访问路径 /03-queryall
                    2.能够渲染 03-queryall.html 模板
                    3.在模板中显示
                        用表格显示以下内容:
                        id    姓名    年龄    邮箱    操作
                        1     wangwc  16     xxxx@163  删除 修改
                        2     Rapwang 18     xxxx@163  删除 修改


        2.基于 实体类 进行查询

    

select * from user limit 2,3

会话


ID:xxx 姓名:xxxx 年龄:xxxx 邮箱:xxxx
ID:xxx 姓名:xxxx 年龄:xxxx 邮箱:xxxx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值