美文网首页
Flask基础05(ORM基本操作)

Flask基础05(ORM基本操作)

作者: 探索1者 | 来源:发表于2018-12-04 14:23 被阅读0次

    数据库操作

    插入

    ​ 1.创建实体类的对象
    ​ 2.完成插入
    db.session.add(实体对象)
    db.session.commit()

    数据库配置
    app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://root:123456@localhost:3306/flask"
    
    指定当视图执行完毕后,自动提交数据库操作
    app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
    
    指定每次执行操作时打印原始的SQL语句
    app.config['SQLALCHEMY_ECHO'] = True
    
    创建数据库应用实例
    db = SQLAlchemy(app)
    
    创建实体类
    class Users(db.Model):
        __tablename__ = 'users'
        id = db.Column(db.Integer, primary_key=True)
        username = db.Column(db.String(80), nullable=True, unique=True)
        age = db.Column(db.Integer)
        email = db.Column(db.String(120), unique=True)
    
        def __init__(self, username, age, email):
            self.username = username
            self.age = age
            self.email = email
    
        def __repr__(self):
            return '<User:%r>' % self.username
    

    查询(基于db.session 和 基于 Models 类)

    基于 db.session 进行查询(适用于多表查询)
    1. db.session.query(Models1, Models2,...)

    参数:要查询的实体类(表),如果是多个实体类的话,相当于要做多表的连接查询
    返回:对应的类的一个查询对象

    2. 查询执行函数

    目的:在query() 的基础上得到最终的数据
    语法:db.session.query(Models).函数名()

     all(): 以列表的方式返回query对象中所有的查询数据
    
     first(): 返回query对象中的第一个查询结果,如果没有结果,返回None
    
     first_or_404(): 返回query对象中的第一个查询结果,如果没有结果的话则终止查询并响应404
    
     count(): 返回query查询结果中的数量
    
    3. 查询过滤器函数

    作用:专门对数据进行筛选,返回部分行数据
    语法: db.session.query().过滤器函数().执行函数()

     filter() 按指定条件进行过滤(单表,多表,定值,不定值)
    
     filter_by() 按等值条件进行过滤
    
     limit() 按限制行数量获取结果
    
     order_by() 按指定列进行排序
    
     group_by() 按指定条件进行分组
    
     聚合函数
    
    4.过滤器函数详解

    filter()
    注意:条件必须由 实体类.属性 组成

    1.查询年龄大于 30 的人的信息
        db.session.query(Users).filter(User.age > 30).all()
    
    2.查询id为1的人的信息
        db.session.query(Users).filter(Users.id==1).first()
    
    3.查询年龄大于30并且id大于1的用户的信息
        filter(条件1,条件2,...)
        db.session.query(Users).filter(Users.age > 30, id>1).all()
    
    4.查询年龄大于30或者id为1的用户的信息
        查询或者操作,需要使用 or_()
        db.session.query(Users).filter(or_(Users.id == 1, Users.age > 30)).all()
    
    5.查询 email 中包含 'w' Users的信息--模糊查询
      db.session.query(Users).filter(Users.email.like('%w%'))
    
    6.查询 id 在 [2,4] 列表中的Users的信息
      users = db.session.query(Users).filter(Users.id.in_([2, 4])).all()
    
    7.查询Users中age在40-50之间的人的信息 between 45 and 50
      users = db.session.query(Users).filter(Users.age.between(40,50)).all()
    

    filter_by()
    注意:只能做等值判断,不能做不等值

    查询 id 为1 的 users 的信息
      db.session.query(Users).filter_by(id=1).first()
    

    limit()

    1.获取users表中的前两条数据
    db.session.query(Users).limit(2).all()
    2.获取 users 表中过滤前 3 条数据后剩余的前2条数据
    db.session.query(Users).limt(2).offset(3).all()
    

    order_by()

    按照 id 倒序排序
    select * from users order by id desc;
    先按照年龄倒序排序,再按照id升序排序
    select * from user order by age desc, id asc
    db.session.query(Users).order_by('age desc, id asc').all()
    

    group_by()

    1.将 users 表中的数据按照 age 进行分组
    select * from users groupby age
    db.session.query(Users.age).group_by('age').all()
    
    聚合函数
    • func.avg(): 求平均值
    • func.sum(): 求和
    • func.max(): 求最大值
    • func.min(): 求最小值
    • func.count(): 求不为空的数量
    1.查询users表中所有人的平均年龄
    select avg(age) from users;
    # 模型类中查询写法
    from sqlalchemy import func
    db.session.query(func.avg(Users.age)).all()
    
    2.users表中,按年龄分组,再查每组的年龄平均值
    select age, avg(age) from users group by age
    # 模型类中查询写法
    db.session.query(func.avg(Users.age)).group_by('age').all()
    

    基于 Models 类进行查询(适用于单表查询)

    语法:Models.query.查询执行函数()
    查询执行函数同上

    相关文章

      网友评论

          本文标题:Flask基础05(ORM基本操作)

          本文链接:https://www.haomeiwen.com/subject/bbbmcqtx.html