欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Flask——sqlalchemy排序,高级查询

程序员文章站 2024-03-04 12:21:59
...

排序

sqlalchemy中的排序,就是在查询的后面加上.order_by(依据排序的字段) ,默认排序是升序。倒序就是在排序字段的后面加上 .desc() 或者在排序字段的前面加上负号-。如果不想在查询的时候排序,可以在模型里面设置,
在模型中使用 __mapper_args__={"order_by":依据排序的字段},如下图所示

class Orderby(Base):
    __tablename__ = 'orderby_Demo'
    id = Column(Integer,autoincrement=True,primary_key=True)
    name = Column(String(50))

    def __repr__(self):
        return "Orderby(name:%s)" % self.name
        
     __mapper_args__ = {
        "order_by":id.desc() # -id
    }
# Base.metadata.drop_all()
Base.metadata.create_all()
session =  sessionmaker(bind=engine)()

# 如果不在模型中设置
# session.query(Orderby).order_by(Orderby.id.desc()).all()
# 这里追加了.desc() ,显示为倒序
# session.query(Orderby).order_by(-Orderby.id).all()
# 或者在 依据排序的字段前面加上负号 -

result = session.query(Orderby).all()
# 这是在模型中设置之后的操作
print(result)

limit,offset和切片

如何要和order_by在一起使用,order_by写在最前面

  • limit:一个参数,取出前几条数据 session.query(类).limit(3)
  • offset:一个参数,下标从0开始,表示从第几条数据开始session.query(类).offset(2)
  • 切片session.query(类).all()[2:5]

group_by

group_by 顾名思义,就是分组

result = session.query(User.gender,func.count(User.id)).group_by(User.gender).all()
for i in result:
    print(i)

having

having 的作用跟where一样,只不过having是追加在group_by后面使用的条件判断,where是在from后面使用的条件判断。

result = session.query(User.age,func.count(User.id)).group_by(User.age).having(User.age>30).all()
for i in result:
    print(i)

子查询

子查询其实就是嵌套查询

subquery标记为子查询 可供给外部查询使用

sub = session.query(User.gender.label('gender'),User.age.label('age')).filter(User.username == 'name7').subquery()
result = session.query(User).filter(User.gender==sub.c.gender ,User.age == sub.c.age)


for i in result:
    print(i.username)