Python Flask,数据库,SQLAlchemy,数据库查询,分页,分页查询paginate

数据库的增、删、改经过 db.session 的会话对象,数据库的查询通常经过 模型类名.query() (也能够经过session会话查询)python

 

demo.py(数据库查询):sql

import User  # 导入模型类

# 经过query查询
# 查询全部。 (User是模型类名)
user_list = User.query.all()   # 返回列表

# 查询第一个
user1 = User.query.first()  # 返回模型类对象。 不存在返回None

# 根据主键id查询
user2 = User.query.get(3)

# 查询结果的数量
user_count = User.query.count()

# 分页查询
paginate_obj = User.query.paginate(page=1, per_page=20, error_out=False)  # 第一页,每页20条数据。 默认第一页
# 参数:error_out 设为True表示页数不是int或超过总页数时,会报错,并返回404状态码。默认True


# 过滤器
# filter_by过滤器 (精确条件)
user_list = User.query.filter_by(name='wang').all()  # 条件只能是等号= 
user = User.query.filter_by(name='wang', age=18).first()   # 逗号链接多个条件,是而且的关系。

# filter过滤器 (通用过滤器。模糊查询)
user = User.query.filter(User.name=="wang", User.age==18).first()  # 条件能够是==、>、<、>=、<=、!=  
user_list = User.query.filter(User.name.endswith('g')).all()  # endswith、startswith、contains

# 逻辑运算符
from sqlalchemy import or_, and_, not_
user_list = User.query.filter(or_(User.name!='wang', User.email.endswith('163.com'))).all()

# 其余过滤器
user_list = User.query.filter(User.name!="wang").offset(5).limit(5).order_by("-id").all()  # order_by("-id")中的-表示降序。flask-sqlalchemy封装的排序方式 
user_list = User.query.order_by(User.id.desc()).all()   # SQLAlchemy的原生排序方式。(默认升序)



# 经过session会话查询。(SQLAlchemy的原始方式。 上面经过query查询的方式是flask-sqlalchemy封装的查询方式)
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)   # app是程序实例
user_list = db.session.query(User).all()    # 查询全部。 query(User)表示查询全部列
sql = 'select * from tb_user;'
users = db.session.execute(sql)

# 聚合函数,group_by()分组
from sqlalchemy import func  # 导入聚合函数
obj_list = db.session.query(User.name, User.role_id, func.count(User.role_id)).group_by(User.role_id).all()
# 返回列表中的元素内容取决于查询的列


分页查询数据库

from xxx import User  # 导入模型类


# 分页查询
paginate_obj = User.query.paginate(page=1, per_page=20, error_out=False)  # 第一页,每页20条数据。 默认第一页。
# 参数:error_out 设为True表示页数不是int或超过总页数时,会报错,并返回404状态码。 默认True

user_list = paginate_obj.items  # 获取查询出来的数据。 (error_out设为False,页数不合法时会返回空列表)

# 获取总页数
total_page = paginate_obj.pages