当前位置:   article > 正文

flask数据库sqlalchemy查询_flask sqlalchemy all()

flask sqlalchemy all()
  1. #简单查询
  2. print(session.query(User).all())
  3. print(session.query(User.name, User.fullname).all())
  4. print(session.query(User, User.name).all())
  5. #带条件查询
  6. print(session.query(User).filter_by(name='user1').all())
  7. print(session.query(User).filter(User.name == "user").all())
  8. print(session.query(User).filter(User.name.like("user%")).all())
  9. #多条件查询
  10. print(session.query(User).filter(and_(User.name.like("user%"), User.fullname.like("first%"))).all())
  11. print(session.query(User).filter(or_(User.name.like("user%"), User.password != None)).all())
  12. #sql过滤
  13. print(session.query(User).filter("id>:id").params(id=1).all())
  14. #关联查询
  15. print(session.query(User, Address).filter(User.id == Address.user_id).all())
  16. print(session.query(User).join(User.addresses).all())
  17. print(session.query(User).outerjoin(User.addresses).all())
  18. #聚合查询
  19. print(session.query(User.name, func.count('*').label("user_count")).group_by(User.name).all())
  20. print(session.query(User.name, func.sum(User.id).label("user_id_sum")).group_by(User.name).all())
  21. #子查询
  22. stmt = session.query(Address.user_id, func.count('*').label("address_count")).group_by(Address.user_id).subquery()
  23. print(session.query(User, stmt.c.address_count).outerjoin((stmt, User.id == stmt.c.user_id)).order_by(User.id).all())
  24. #exists
  25. print(session.query(User).filter(exists().where(Address.user_id == User.id)))
  26. print(session.query(User).filter(User.addresses.any()))
  1. user = session.query(User.name, User.created_at,
  2. User.updated_at).filter_by(name="letter").order_by(
  3. User.created_at).first()

多表查询

  1. #多表查询
  2. print( session.query(UserDetails,User).all() ) #这个是 cross join
  3. print( session.query(UserDetails,User).filter(User.id==UserDetails.id).all() ) #这是也是cross join 但是加上了where条件
  4. print( session.query(User.username,UserDetails.lost_login).join(UserDetails,UserDetails.id==User.id).all() ) #这个是inner join
  5. print( session.query(User.username,UserDetails.lost_login).outerjoin(UserDetails,UserDetails.id==User.id).all() ) #这个才是左连接,sqlalchemy没有右连接
  6. q1 = session.query(User.id)
  7. q2 = session.query(UserDetails.id)
  8. print(q1.union(q2).all()) #这个是union关联

还有其他的带条件查询

  1. #不等于
  2. print( session.query(User).filter(User.username!='jingqi').all() )
  3. #模糊匹配 like
  4. print( session.query(User).filter(User.username.like('jingqi')).all() )
  5. print( session.query(User).filter(User.username.notlike('jingqi')).all() )
  6. #成员属于 in_
  7. print( session.query(User).filter(User.username.in_(['jingqi','jingqi1'])).all() )
  8. #成员不属于 notin_
  9. print( session.query(User).filter(User.username.notin_(['jingqi','jingqi2'])).all() )
  10. #空判断
  11. print( session.query(User).filter(User.username==None).all() )
  12. print( session.query(User).filter(User.username.is_(None)).all() )
  13. print( session.query(User).filter(User.username.isnot(None)).all() )
  14. #多条件
  15. print( session.query(User).filter(User.username.isnot(None),User.password=='qwe123').all() )
  16. #选择条件
  17. from sqlalchemy import or_,and_,all_,any_
  18. print( session.query(User).filter(or_(User.username=='jingqi',User.password=='qwe123')).all() )
  19. print( session.query(User).filter(and_(User.username=='jingqi2',User.password=='111')).all() )
  1. #限制查询返回结果
  2. print( session.query(User).filter(User.username!='jingqi').limit(2).all())
  3. print( session.query(User).filter(User.username!='jingqi').offset(2).all())
  4. print( session.query(User).filter(User.username!='jingqi').slice(2,3).all())
  5. #可以排序之后再进行限制
  6. from sqlalchemy import desc
  7. print( session.query(User).filter(User.username!='budong').order_by(User.username).all())
  8. print( session.query(User).filter(User.username!='budong').order_by(desc(User.username)).slice(1,3).all())
  1. 查询制定的id列
  2. result = StuModel.query.with_entities(StuModel.id) # 返回BaseQuery
  3. 返回指定的两列
  4. result = StuModel.query.with_entities(StuModel.id, RiskDataModel.name)
  5. 并且去重
  6. result = StuModel.query.with_entities(StuModel.store_st_id).distinct().all()

在Flak-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。 

会话用db.session表示。在准备把数据写入数据库前,需要先将数据添加到会话中然后调用commit()方法提交会话。

Flask-SQLAlchemy中,查询操作是通过query对象操作数据。

最基本的查询时返回表中所有数据,可以通过过滤器进行更精确的数据库查询。 

聚合查询

func.count:统计行的数量。

* func.avg:求平均值。

* func.max:求最大值。

* func.min:求最小值。

* func.sum:求和。

`func`上,其实没有任何聚合函数。但是因为他底层做了一些魔术,只要mysql中有的聚合函数,都可以通过func调用。 

group_by 和 having:

根据某个字段进行分组。比如想要根据性别进行分组,来统计每个分组分别有多少人,那么可以使用以下代码来完成:

session.query(User.username,func.count(User.id)).group_by(User.username).all()

having是对查找结果进一步过滤。比如只想要看未成年人的数量,那么可以首先对年龄进行分组统计人数,然后再对分组进行having过滤。示例代码如下:

result = session.query(User.age,func.count(User.id)).group_by(User.age).having(User.age >= 18).all()

 limit、offset和切片操作:

  1. limit:可以限制每次查询的时候只查询几条数据。
  2. offset:可以限制查找数据的时候过滤掉前面多少条。
  3. 切片:可以对Query对象使用切片操作,来获取想要的数据。可以使用slice(start,stop)方法来做切片操作。也可以使用[start:stop]的方式来进行切片操作。一般在实际开发中,中括号的形式是用得比较多的。希望大家一定要掌握。示例代码如下:
users = session.query(User).order_by(User._id.desc())[0:10]

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/553259
推荐阅读
相关标签
  

闽ICP备14008679号