Day6 ---- SQLAlchemy进阶

昨日回顾

  • RequestParser解析请求如何实现?
  • 如何序列化数据?
  • 如何定制响应的json格式?
  • ORM是什么?
  • Flask中模型类如何创建?
  • 迁移脚本如何创建?如何实现数据库迁移?
  • 增删改查语法是什么?

今日内容

  • 单表查询详解
  • 关系查询
    • 一对多关系
    • 多对多关系
  • 优化查询
  • Flask-SQLAlchemy执行自定义SQL语句

1. 单表数据查询

1.1 all(), first(), get()的使用

# python manage.py shell   进入flask shell命令行,可以操作模型类
# flask > 2  可以直接使用flask shell进入

# all():查询所有数据,返回obj list
user_list = User.query.all()
# 如return marshal(user_list, resource_fields)

# first(): 表中第一条数据,返回对象
user = User.query.first() 

# get(): 根据主键值查询,查询不到返回None
user = User.query.get(1) # 返回id=1的对象

1.2 filter(), filter_by实现过滤操作

  • 条件查询提供了filter()与filter_by来实现;
  • filter_by可以看做是filter的简写方式.
  • 过滤返回BaseQuery对象
# filter
# 获取一个对象
User.query.filter(User.username=='name').first()
User.query.filter(User.username=='name').one_or_none() # not get

# 获取所有的对象
User.query.filter(User.username=="jack").all()

# filter_by()实现 简单的 条件查询
# 必须使用first或all 获取对象
User.query.filter_by(username="tom").first()

1.3 分页与排序

  • offset/limit 联合使用
  • 返回BaseQuery对象
# 表中的所有数据 的分页
# 请求url  /user/user?page=2&pageSize=3
page = request.args.get("page")
page = int(page)
pageSize = request.args.get("pageSize")
pageSize = int(pageSize)

data = User.query.offset((page-1)*pageSize).limit(pageSize).all()
return marshal(data, resource_fields)

# 查询 并分页 过滤返回的是查询语句
User.query.filter_by(age=18).offset(2).limit(3).all()  
# 跳过二条开始查询,限制输出3条
注意: offset与limit顺序调换, 不影响查询结果

# 排序 
User.query.order_by(User.age.asc()).all()

#按照年龄降序排序
User.query.order_by(User.age.desc()).all() 

# 注意顺序
books = Book.query.filter_by(title="红楼梦").order_by(Book.id.asc()).offset(0).limit(1).all()

最后一定要first()或者all()

1.4 逻辑运算与聚合

or_, 或
and_, 与
not_,非
_lt_ 小于

# 逻辑运算
from sqlalchemy import or_
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laufing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值