增:
# 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()# inUser.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 编写修改页面