Python 后端 学习笔记 ·

「Flask笔记」sql query聚合函数和filter过滤

flask -- sql query聚合函数和filter过滤


先创建数据库

from sqlalchemy import create_engine,Column,Integer,String,func
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import setting
import random

DB_URL = setting.conn()
engine = create_engine(DB_URL)

Base = declarative_base(engine)

session = sessionmaker(engine)()

class Sql(Base):
    __tablename__ = 'sql_test'
    id = Column(Integer,primary_key=True,autoincrement=True)
    title = Column(String(50),nullable=False)
    price = Column(String(50),nullable=False)

    def __repr__(self):
        return "<data(id:%s,title:%s,price:%s)>" % (self.id,self.title,self.price)

Base.metadata.drop_all()  #先删除原来的数据库再重新创建
Base.metadata.create_all()

for x in range(6):
    article = Sql(title='title%s'%x,price = random.randint(50,100))
    session.add(article)
session.commit()

模型对象

articles = session.query(Sql).all()
print(articles)

模型中的属性

articles = session.query(Sql.title,Sql.price).all()
print(articles)

query聚合函数

聚合函数

#以下效果和sql查询一致

#count统计个数
result = session.query(func.count(Sql.id)).first()

#avg求平均数
result = session.query(func.avg(Sql.price)).first()

#max求最大值
result = session.query(func.max(Sql.price)).first()

#min求最小值
result = session.query(func.min(Sql.price)).first()

#sum求和
result = session.query(func.sum(Sql.price)).first()

filter过滤

#以下效果和sql查询一致

#equals
result = session.query(Sql).filter(Sql.id == 1).first()

#not equals
result = session.query(Sql).filter(Sql.id != 1).all()

#like & ilike(不区分大小写)
result = session.query(Sql).filter(Sql.title.like('title%')).all()

#in_ & notin_
result = session.query(Sql).filter(Sql.title.in_(['title1','title2'])).all()
result = session.query(Sql).filter(~Sql.title.in_(['title1','title2'])).all()
#或者可以用 result = session.query(Sql).filter(Sql.title.notin_(['title1','title2'])).all()

#is null & is not null
result = session.query(Sql).filter(Sql.title!=None).all()

#or
#使用或的话需要导入or_方法
result = session.query(Sql).filter(or_(Sql.title=='title0',Sql.id==2)).all()

#and
#使用and可以直接用','分割,或者类似or_方法导入and_
result = session.query(Sql).filter(Sql.title=='title0',Sql.id==1).all()
result = session.query(Sql).filter(and_(Sql.title=='title0',Sql.id==1)).all()

参与评论