常见的查询方法:
all()返回所有用户
User.query.all()
first()返回第一条用户 没有返回None
first_or_404()返回第一条用户,没有返回404错误响应
User.query.first()
User.query.first_or_404()
get() 返回指定的主键(id 字段)的用户
get_or_404() 返回指定的主键(id字段)的用户,没有返回404错误响应
User.query.get(1)
User.query.get_or_404(1)
count() 返回用户的数量
User.query.count()
paginate()返回一个Pagination对象,可以对用户进行分页处理
User.query.order_by(user.timestamp.desc()).paginate(page, per_page)
page: 当前页数
per_page: 每页的条数
with_parent(instance)传入模型类实例对象作为参数,返回和这个实例相关的对象
实例:获取用户未读信息的条数(User, Massage 外键关联)
user = User.query.get(1)
massage = Massage.query.with_parent(user).filter_by(is_read = False).count()
常用过滤方法
filter()、filter_by()使用制定的过滤规则,获取想要的查询对象
User.query.filter(User.name=='jack').first()
User.query.filter_by(name='jack').first()
like 模糊过滤查询:
User.query.filter(User.name like ('%ac%')).all()
in 包含过滤查询:
User.query.filter(User.name in_(['jack','mary','bruce'])).all()
not in 不包含过滤查询:
User.query.filter(~User.name in_(['jack','mary','bruce'])).all()
and 逻辑与过滤查询:
User.query.filter(and_(User.name=='jack', User.gender == 1)).all()
or 逻辑或过滤查询:
User.query.filter(or_(User.name=='jack', User.name == 'mary')).all()
order_by 按照规定的顺序查询:
# 按照id升序
User.query.filter(User.gender==1).order_by(User.id).all()
# 按照id降序
User.query.filter(User.gender==1).order_by(User.id.desc()).all()
limit 限制数量查询:
User.query.filter(User.gender==1).limit(3).all()
group_by 根据条件分组查询:
from sqlalchemy import func
# 使用with_entities()方法来获取要在结果中返回的列
# lable 给字段起别名
User.query.with_entities(User, func.count(*).lable('num')).group_by(User.gender).all()
offset 根据指定的偏移量查询:
User.query.offset(2).limit(5).all()
func.random 随机获取查询:
User.query.order_by(func.random()).limit(10)