Flask框架之基本查询语法

基本语法格式:

模型类名.query[.过滤器].执行器

常用的SQLAlchemy查询过滤器

过滤器说明
filter()把过滤器添加到原查询上,返回一个新查询
filter_by()把等值过滤器添加到原查询上,返回一个新查询
limit使用指定的值限定原查询返回的结果
offset()偏移原查询返回的结果,返回一个新查询
order_by()根据指定条件对原查询结果进行排序,返回一个新查询
group_by()根据指定条件对原查询结果进行分组,返回一个新查询

常用的SQLAlchemy查询执行器

方法说明
all()以列表形式返回查询的所有结果
first()返回查询的第一个结果,如果未查到,返回None
first_or_404()返回查询的第一个结果,如果未查到,返回404
get()返回指定主键对应的行,如不存在,返回None
get_or_404()返回指定主键对应的行,如不存在,返回404
count()返回查询结果的数量
paginate()返回一个Paginate对象,它包含指定范围内的结果

案例代码:

# 查询所有人物数据
    print(PeopleInfo.query.all())# 查询有多少个人物
    print(PeopleInfo.query.count())# 查询第1个人物
    print(PeopleInfo.query.first())# 查询id为4的人物[3种方式]
    print(PeopleInfo.query.get(4))
    print(PeopleInfo.query.filter(PeopleInfo.id == 4).first())
    print(PeopleInfo.query.filter_by(id=4).first())# 查询名字结尾字符为g的所有数据[开始/包含]
    print(PeopleInfo.query.filter(PeopleInfo.name.endswith(‘g‘)).all())# 查询名字不等于wang的所有数据[2种方式]
    print(PeopleInfo.query.filter(PeopleInfo.name != ‘wang‘).all())# 查询名字和邮箱都以 li 开头的所有数据[2种方式]
   print(PeopleInfo.query.filter(PeopleInfo.name.startswith(‘li‘)).filter(PeopleInfo.email.startswith(‘li‘)).all())
    print(PeopleInfo.query.filter(PeopleInfo.name.startswith(‘li‘), PeopleInfo.email.startswith(‘li‘)).all())# 查询password是 `123456` 或者 `email` 以 `itheima.com` 结尾的所有数据
    from sqlalchemy import or_
    print(PeopleInfo.query.filter(or_(PeopleInfo.password == ‘123456‘, PeopleInfo.email.endswith(‘itheima.com‘))).all())# 查询id为 [1, 3, 5, 7, 9] 的人物列表
    print(PeopleInfo.query.filter(PeopleInfo.id.in_([1, 3, 5, 7, 9])).all())# 查询name为liu的人物数据
    print(PeopleInfo.query.filter_by(name=‘liu‘).all())# 查询所有人物数据,并以邮箱排序
    # 降序
    print(PeopleInfo.query.order_by(PeopleInfo.email.desc()).all())
    # 升序
    print(PeopleInfo.query.order_by(PeopleInfo.email.asc()).all())# 每页3个,查询第2页的数据
    # page=None, 第几页
    # per_page=None 每页几条数据
    paginates= PeopleInfo.query.paginate(page=1, per_page=2)
    # 第几页
    print(paginates.page)
    # 每页几个
    print(paginates.per_page)
    # 一共多少数据
    print(paginates.total)
    # 当前页的数据
    print(paginates.items)

模型类代码:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy


app = Flask(__name__)

#设置连接数据库的URL
app.config[‘SQLALCHEMY_DATABASE_URI‘] = ‘mysql://root::3306/test‘

app.config[‘SQLALCHEMY_TRACK_MODIFICATIONS‘] = True
#查询时会显示原始SQL语句
app.config[‘SQLALCHEMY_ECHO‘] = True
db = SQLAlchemy(app)

#定义模型
class BookInfo(db.Model):
    #设置表名
    __tablename__ = ‘bookinfo‘
    #设置为主键之后,自动自增长
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(20),unique=True,nullable=False)
    pub_date = db.Column(db.Date,nullable=True)
    readcount = db.Column(db.Integer,default=1)
    commentcount = db.Column(db.Integer,default=1)
    is_delete = db.Column(db.Boolean,default=False)


    def __repr__(self):
        return self.name

class PeopleInfo(db.Model):
    __tablename__ = ‘peopleinfo‘
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(20),unique=True)
    password = db.Column(db.String(20),nullable=False)
    email = db.Column(db.String(50),nullable=True)
    #设置外键
    book_id = db.Column(db.Integer,db.ForeignKey(‘bookinfo.id‘))

    def __repr__(self):
        return self.name

if __name__ == ‘__main__‘:
    app.run(debug=True)

相关推荐