zoukankan      html  css  js  c++  java
  • 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:mysql@127.0.0.1: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)
    该花的钱要花,该吃的饭要吃。
  • 相关阅读:
    轻重搭配
    EF的优缺点
    使用bootstrap-select有时显示“Nothing selected”
    IIS发布 HTTP 错误 500.21
    js添加的元素无法触发click事件
    sql server查看表是否死锁
    sql server把一个库表的某个字段更新到另一张表的相同字段
    SQLSERVER排查CPU占用高的情况
    SQL server中如何按照某一字段中的分割符将记录拆成多条
    LINQ to Entities does not recognize the method 'System.DateTime AddDays(Double)' method, and this method cannot be translated into a store expression.
  • 原文地址:https://www.cnblogs.com/chao666/p/12424924.html
Copyright © 2011-2022 走看看