Flask基础05(ORM基本操作)

2018-12-04  本文已影响0人  探索1者

数据库操作

插入

​ 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()
聚合函数
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.查询执行函数()
查询执行函数同上

上一篇下一篇

猜你喜欢

热点阅读