增:
# 1. 找到模型类并创建对象
user = User()
# 2. 给对象的属性赋值
user.username = username
user.password = password
user.phone = phone
# 3. 将user对象添加到session中 (类似缓存)
db.session.add(user)
# 4. 提交数据
db.session.commit()
删:
# 两种删除:
# 1. 逻辑删除(定义数据库中的表的时候,添加一个字段isdelete,通过此字段控制是否删除)
id = request.args.get('id')
# 获取该id的用户
user=User.query.get(id)
# 逻辑删除:
user.isdelete = True
# 提交
db.session.commit()
# 2. 物理删除(彻底从数据库删除)
id = request.args.get('id')
user = User.query.get(id)
# 将对象放到缓存准备删除
db.session.delete(user)
# 提交删除
db.session.commit()
改:
id = request.form.get("id")
# 找用户
user = User.query.get(id)
# 改用户信息
user.phone = phone
user.username = username
# 提交
db.session.commit()
查:
# 1. 查询所有
模型类.query.all() # select * from user;
# 2. filter_by()查询
模型类.query.filter_by() # 里面是一个等值 模型类.query.filter_by(字段名 = 值)
模型类.query.filter_by(字段名=值).all #返回一个列表 select * from user where 字段名=值;
模型类.query.filter_by(字段名=值).first #返回一个对象, select * from user where 字段名=值 limit(1);
# 3.filter()查询
模型类.query.filter() # 里面是布尔的条件 模型类.query.filter(模型名.字段名 == 值)
(1). filter可以加筛选条件
'''
User.query.filter(User.username.startswith("c")).all() # 以...开头
User.query.filter(User.username.endswith("o")).all() # 以...结尾
User.query.filter(User.username.contains("c")).all() # 包含
User.query.filter(User.username.like("%2%")).all() # 模糊查询,需要加%
'''
(2). 多条件查询: 与: and_ ; 或: or_ ; 非: not_ ; 在...里: in_
# __gt__, __lt__,__ge__(gt equal),__le__(le equal)
# 通常应用在范围(整形,日期);也可直接使用 > < >= <= !=
from sqlalchemy import or_, and_,not_,in_
# or
# select * from user where username like "1%" or username like '%c%';
User.query.filter(or_(User.username.like("1%"), User.username.contains("c"))).all()
# and
# select * from user where username like "%c%" and radtetime < 'xxx'
User.query.filter(and_(User.username.contains("c"), User.radtetime.__gt__("2023-05-19 17:00:15"))).all()
# 取反
User.query.filter(not_(User.username.contains("c") )).all()
# in
User.query.filter(User.phone.in_(["13800000000","17700000000"])).all()
# 4. 排序: order_by
# 对所有的进行排序
User.query.order_by(-User.id).all()
# 先筛选后排序
User.query.filter(User.username.contains('o')).order_by(-User.radtetime).all()
# 5. 限制: limit + offset:偏移
User.query.limit(2).all() # 默认获取前2条
User.query.offset(2).limit(2).all() # 跳过两条记录,在获取两条
# 6. 总结
(1). User.query.all() # 所有
(2). User.query.get(pk) # 通过主键查询一个
(3). User.query.filter() *
# 如果要检索的字段是字符串类型(varchar,db。String):
User.username.startswith("")
User.username.endswith("")
User.username.contains("")
User.username.like("")
User.username.in_(["",""])
User.username=="zzz"
# 如果要检索的字段是整形或者日期类型:
User.age.__lt__(18)
User.redatetime.__gt__("......")
User.age.__le__(18) # <=
User.age.__ge__(18) # >=
User.age.between(15,30) # 区间范围
(4). 多个条件一起检索: and_,or_,not_
(5). 排序: order_by()
(6). 获取指定数量: limit() offset()
案例: 注册 & 登录
前置准备: 搭建蓝图
1. 创建模型(数据库)
(1). apps / user /models.py 创建模型类
(2). app.py 引入模型类
(3). 终端执行,生成模型
2. 首页展示
(1). apps / user / view.py 编写视图函数
(2). templates / user / conter.html 编写首页视图
3. 用户注册
(1). apps / user / view.py 编写视图函数
(2). templates / user / conter.html 预留注册跳转功能
(3). templates / user / register.html 编写注册页面
4. 用户登录
(1). apps / user / view.py 编写视图函数
(2). templates / user / conter.html 预留登录跳转功能
(3). templates / user / login.html 编写登录页面
5. 首页检索(搜索)
(1). apps / user / view.py 编写视图函数
(2). templates / user / conter.html 编写搜索功能
(3). templates / user / conter.html 编写js实现搜索
6. 用户删除
(1). apps / user / view.py 编写视图函数
(2). templates / user / conter.html 首页循环渲染数据时,获取用户id
7. 用户更新
(1). apps / user / view.py 编写视图函数
(2). templates / user / conter.html 首页循环渲染数据时,获取用户id,点击跳转到修改页面
(3). templates / user / update.html 编写修改页面