Flask-sqlalchemy-高级查询

查询

  1. # -*- coding: utf-8 -*-  
  2. from sqlalchemy.orm import sessionmaker  
  3. from SQLAlchemy.create import engine,User  
  4. Session = sessionmaker(engine)  
  5. db_session = Session()  
  6.         
  7. query = db_session.query(User).filter(User.name.like('%2%')).order_by(User.id)  
  8.         
  9. # ---> 查询 all list  
  10. print(query.all())  
  11.         
  12. # ---> first() 第一个  
  13. print(query.first())  
  14.         
  15. # ---> one()  如果这个结果集少于或者多于一条数据结论有且只有一条数据的时候才会正常的返回,否则抛出异常  
  16. print(query.one())  
  17.         
  18. # ---> one_or_none() 在结果集中没有数据的时候也不会抛出异常  
  19.         
  20. # ---> scalar()  底层调用one()方法,并且如果one()方法没有抛出异常,会返回查询到的第一列的数据  
  21. query2 = db_session.query(User).filter(User.name=="2").scalar()  
  22. print(query2)  
  23.         
  24.         
  25. # ---> text  
  26. from sqlalchemy import text  
  27. query3 = db_session.query(User).filter(text("id<3")).order_by(text('id'))  
  28. print(query3.all())  
  29.         
  30. # text 带变量方式  :传入变量,用params接收  
  31. query4 = db_session.query(User).filter(text("id<:value")).params(value=4)  
  32. print(query4.all())  
  33.         
  34. # from_statement 原生sql语句  
  35. query5 = db_session.query(User).from_statement(text("select * from user where id>:value")).params(value=2).all()  
  36. print(query5)  
  37.         
  38. db_session.close()  

       

计数(Count)

  1. 有时候你想明确的计数,比如要统计users表中有多少个不同的姓名,  
  2. 那么简单粗暴的采用以上count是不行的,因为姓名有可能会重复,  
  3. 但是处于两条不同的数据上,如果在原生数据库中,可以使用distinct关键字,  
  4. 那么在SQLAlchemy中,可以通过func.count()方法来实现  
  5. from sqlalchemy import func  
  6. query1 = db_session.query(func.count(User.name)).first() #  (4,)  
  7.       
  8. 如果想实现select count(*) from users,可以通过以下方式来实现:  
  9. query2 = db_session.query(func.count("*")).select_from(User).scalar() # 4  
  10.       
  11. 如果指定了要查找的表的字段,可以省略select_from()方法:  
  12. query3 = db_session.query(func.count(User.id)).scalar() # 4  

  

你可能感兴趣的:(Flask-sqlalchemy-高级查询)