基于ORM的CRUD

SQLAlchemy的增删改查

1.增加 - C(Create)

  1. 创建实体类对象,并为对象的属性赋值
    示例:
    #每一条数据即一个对象
    user = Users()
    user.username = "wangwc"
    user.age = 37
    ... ...
    
  2. 将实体对象保存回数据库
    db.session.add(user)
    #针对非查询操作,必须手动将操作提交回数据库
    db.session.commit()
  3. 配置自动提交操作或数据库
    app.config[‘SQLALCHEMY_COMMIT_ON_TEARDOWN’]=True
    当视图函数执行完毕后,自动提交所有操作到数据库中

2.查询 - R(Retrieve)

1.基于 db.session 进行查询

  1. db.session.query()
    1. 参数: 要查询的列,如果查询多个列的话使用,隔开,如果要查询所有
    2. 示例:
      1. 查询 Users实体类中的id,username,age
        db.session.query(Users.id,Users.username,Users
      2. 查询Users实体类中所有的列
        db.session.query(Users)
        3.查询Users实体类以及Wife实体类中所有列
        db.session.query(Users,Wife)
        返回值:
        该函数会返回一个Query对象,类型为BaseQuery
  2. 查询执行函数
    目的:在db.session.query()上得到最终的结果
    语法:db.session.query(xxx).查询执行函数()
    函数 说明
    all() 以列表的方式返回所有数据
    first() 以实体对象的方式返回查询中的第一条数据,
    first_or_404() 效果同上,如果没有数据则响应 404
    count() 返回查询结果的数量
  3. 查询过滤器函数
    1. 作用
      在db.session.query() 追加筛选条件
    2. 语法
      db.session.query().查询过滤器函数().查询执行函数()
过滤器函数 作用
filter() 指定查询条件
filter_by() 等值查询条件中使用
limit() 获取前几行数据
offset() 指定结果偏移量
order_by() 排序
group_by() 分组
  1. filter() :构建各种各样的条件
#1. and示例
db.session.query(Users).filter(Users.age>17).filter(Users.id > 1).all()
db.session.query(Users).filter(Users.age>17,Users.id>1).all()

# 2. or示例
from sqlalchemy import _or
xxx.filter(or_(条件1,条件2))

#3. 模糊查询 like
db.session.query(Users).filter(Users.email.like("%wang%"))

#in 示例
db.session.query(Users).filter(Users.age.in_([17,30,45])).all()

#between and
db.session.query(Users).filter(Users.age.between(30,45)).all()
  1. filter_by():只能做单表的等值条件过滤筛选
    语法:
    db.session.query(XX).filter_by(属性=值).all()
    特点:
    1. 不用实体类.属性,而直接用属性名即可
    2. 等值判断使用 = , 而不是 ==
  2. limit() & offset()
    1. limit(n)
      作用:获取前n行数据
      语法:
      db.session.query(XX).limit(n).all()
    2. offset(n)
      作用:从查询结果中跳过前n跳数据
      语法:
      db.session.query(XX).offset(n)
  3. order_by()
    作用: 排序
    示例:
#1. 将Users实体中所有的数据降序排序
db.session.query(Users).order_by("age desc").all()

#2. Users实体中大于18岁的人,按年龄降序排序,如果年龄相同按id升序排序
db.session.query(Users).filter(Users.age > 18).order_by("age desc,id").all()
  1. group_by():聚合查询
    1. 基本的聚合查询
      from sqlalchemy import func
      #func对象中提供了所有的聚合函数
      聚合函数:
      sum() : 求和 , func.sum()
      count():
      max():
      min():
      avg():
      语法:
      db.session.
      query(func.聚合函数(实体类.属性)).all()
    2. 完整的查询操作
    db.session.query(查询列,聚合列)
    	.filter(条件) # 分组前筛选 - where
    	.group_by('分组') # 分组 - group by
    	.having(条件) # 分组后筛选 - having
    

2.基于实体类的查询

实体类.query.查询过滤器函数().查询执行函数()

  1. 查询Users实体中所有的数据
    Users.query.all()

3.修改 - U

步骤:与增加数据类似
1.查
查询出要修改的实体对象
2.改
通过实体对象.属性 = 值
3.保存
db.session.add(实体对象)
eg:

	#修改 Users 实体中 id 为 1 的人的年龄为37
	user = db.session.query(Users).filter_by(id=1).first()
	user.age = 37
	db.session.add(user)
	# 创建用户并添加至数据库中
	user = Users()
	user.username = xxx
	user.age = xxx
	user.email = xxx
	db.session.add(user)

4.删除 - D

  1. 查询
    查询出要删除的实体对象
  2. 删除
    db.session.delete(对象)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章