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)
上一篇: 生物信息学 几个程序