flask_SQlalchemy的复杂使用

 
0
 
 
1、关联查询、对应sql的join 和 left join
两张表关联查询 User 和 Address表a 后面写条件
例子1、session.query(User,Address).filter(User.id == Address.user_id).all()
例子2、session.query(User).join(User.addresses).all()
 
 
包含: nid为8,9 User表的字段nid 包含 8和9
row1 = session.query(models.Users).filter(models.Users.nid.in_([8,9])).all()
 
 
不包含: nid为8,9
  1. row1 = session.query(models.Users).filter(~models.Users.nid.in_([8,9])).all()
 
 
嵌套查询: 先获取年龄等于35的用户id,再通过包含查询,查询到这两个id的数据
 
  1. row1 = session.query(models.Users).filter(models.Users.nid.in_(session.query(models.Users.nid).filter(models.Users.age==35))).all()
 
 
and的用法: 查询nid大于9和年龄小于30的用户
  1. row1 = session.query(models.Users).filter(and_(models.Users.nid>9,models.Users.age<30))
 
 
or的用法: 或者
ow1 = session.query(models.Users).filter(or_(models.Users.gender==True,models.Users.age<30))
 
 
 
and_和or_可以互相嵌套: 查询gender是真的用户,或者id>1而且年龄在20到30之间
 
  1. row1 = session.query(models.Users).filter(
  2. or_(
  3. models.Users.gender==True,
  4. and_(
  5. models.Users.nid>1,
  6. models.Users.age.between(20,30)
  7. )
  8. ).all()
 
**其中 第5行的 model.User.nid >1, 这个逗号的意思是 和的意思
 
 
分页: **分页后的效果是 每页3个 从第25个元素开始
offset:起始位置
limit:数量
row1 = session.query(models.Users).offset(2).limit(3)
 
 
 
 
 
模糊查询: 查询年龄是3开始的 比如31 32 39
row1 = session.query(models.Users).filter(models.Users.age.like("3%")).all()
 
 
排序: asc升序
  1. #按照年龄排序
  2. row1 = session.query(models.Users).order_by(models.Users.age.asc())
 
 
排序: desc降序
  1. row1 = session.query(models.Users).order_by(models.Users.age.desc())
 
 
聚合函数:
ret = session.query(
func.sum(models.Users.age) #年龄求和
func.max(models.Users.age) #求最大年龄
func.min(models.User.age) #求最小年龄
).first()
 
#分组
ret = session.query(func.count(models.User.name)).group_by.(models.Users.gender).all()
print('男:',ret[0][0],'个')
print('女:',ret[1][0],'个')
 
#结果
男: 9 个
女: 4 个
 
 
 
.distinct 去重查询
books = session.query(Book.cat_id).distinct(Book.cat_id).all()
print([dict(zip(v.keys(), v)) for v in books])
 

posted on 2020-11-27 11:42  袁佳佳  阅读(138)  评论(0编辑  收藏  举报

导航