文章目录
SQLAlchemy的增删改查
1.增加 - C(Create)
- 创建实体类对象,并为对象的属性赋值
示例:#每一条数据即一个对象 user = Users() user.username = "wangwc" user.age = 37 ... ...
- 将实体对象保存回数据库
db.session.add(user)
#针对非查询操作,必须手动将操作提交回数据库
db.session.commit() - 配置自动提交操作或数据库
app.config[‘SQLALCHEMY_COMMIT_ON_TEARDOWN’]=True
当视图函数执行完毕后,自动提交所有操作到数据库中
2.查询 - R(Retrieve)
1.基于 db.session 进行查询
- db.session.query()
- 参数: 要查询的列,如果查询多个列的话使用,隔开,如果要查询所有
- 示例:
- 查询 Users实体类中的id,username,age
db.session.query(Users.id,Users.username,Users - 查询Users实体类中所有的列
db.session.query(Users)
3.查询Users实体类以及Wife实体类中所有列
db.session.query(Users,Wife)
返回值:
该函数会返回一个Query对象,类型为BaseQuery
- 查询 Users实体类中的id,username,age
- 查询执行函数
目的:在db.session.query()上得到最终的结果
语法:db.session.query(xxx).查询执行函数()
函数 说明
all() 以列表的方式返回所有数据
first() 以实体对象的方式返回查询中的第一条数据,
first_or_404() 效果同上,如果没有数据则响应 404
count() 返回查询结果的数量 - 查询过滤器函数
- 作用
在db.session.query() 追加筛选条件 - 语法
db.session.query().查询过滤器函数().查询执行函数()
- 作用
过滤器函数 | 作用 |
---|---|
filter() | 指定查询条件 |
filter_by() | 等值查询条件中使用 |
limit() | 获取前几行数据 |
offset() | 指定结果偏移量 |
order_by() | 排序 |
group_by() | 分组 |
- 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()
- filter_by():只能做单表的等值条件过滤筛选
语法:
db.session.query(XX).filter_by(属性=值).all()
特点:- 不用实体类.属性,而直接用属性名即可
- 等值判断使用 = , 而不是 ==
- limit() & offset()
- limit(n)
作用:获取前n行数据
语法:
db.session.query(XX).limit(n).all() - offset(n)
作用:从查询结果中跳过前n跳数据
语法:
db.session.query(XX).offset(n)
- limit(n)
- 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()
- group_by():聚合查询
- 基本的聚合查询
from sqlalchemy import func
#func对象中提供了所有的聚合函数
聚合函数:
sum() : 求和 , func.sum()
count():
max():
min():
avg():
语法:
db.session.
query(func.聚合函数(实体类.属性)).all() - 完整的查询操作
db.session.query(查询列,聚合列) .filter(条件) # 分组前筛选 - where .group_by('分组') # 分组 - group by .having(条件) # 分组后筛选 - having
- 基本的聚合查询
2.基于实体类的查询
实体类.query.查询过滤器函数().查询执行函数()
- 查询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
- 查询
查询出要删除的实体对象 - 删除
db.session.delete(对象)