• Flask数据的增删改查(CRUD)


    数据的查询

    all():查询全部的数据,其结果是一个列表,每一个元素都是一个对象
        students = Student.query.all()
     
    过滤查询:
        第一种:filter,结果是baseQuery objects,
        过滤条件的格式:对象.属性==值
        studnets = Student.query.filter(Student.id==1)
        第二种:filter_by,结果是baseQuery objects,可以进行遍历
        students = Student.query.filter_by(id=1)
        第三种:原生sql查询id=1的信息,结果是一个可以遍历的对象
        sql = 'select * from student where id=1;'
        students = db.session.execute(sql)
        
    模糊查询:
        语法:filter(模型名.属性.运算符('xx'))
        运算符:
            contains:包含
            startswith:以什么开始
            endswith:以什么结束
            in_:在范围内
            like:模糊
            __gt__: 大于
            __ge__:大于等于
            __lt__:小于
            __le__:小于等于
            
    例子:
    # 模糊查询,查询姓名中包含小花的学生信息
    # django中filter(s_name__contains='小花')
        students = Student.query.filter(Student.s_name.contains('小花'))
        
    # 以什么开始
        students = Student.query.filter(Student.s_name.startswith(''))
        
     # 以什么结束
        students = Student.query.filter(Student.s_name.endswith('1'))
        
    # 查询年龄大于等于16的学生信息
        students = Student.query.filter(Student.s_age.__gt__(15))
        
    # 查询id在10到20之间的学生的学生信息
        students = Student.query.filter(Student.s_age.in_([10,11,12]))
    # 查询年龄小于17的学生信息
        Student.query.filter(Student.s_age < 17)
        students = Student.query.filter(Student.s_age.__lt__(17))
            
    # 模糊查询,使用like,查询姓名中第二位为花的学生信息
    # like '_花%',_代表必须有一个数据,%任何数据
        students = Student.query.filter(Student.s_name.like('_花%'))
            
        
    筛选:
     
    offset()
        # 跳过3个数据
        stus = Student.query.offset(3)
     
    limit()
        # 跳过3个数据,查询5个信息
        stus = Student.query.offset(3).limit(5)
     
    order_by()
        # 按照id降序,升序
        students = Student.query.order_by('id')
        students = Student.query.order_by('-id')
     
        students = Student.query.order_by(desc('id'))
        students = Student.query.order_by(asc('id'))
     
        students = Student.query.order_by('id desc')
        students = Student.query.order_by('id asc')
     
    get()
        #使用get,获取id=1的学生对象,get()默认接收id
        # 拿不到值不会报错,返回空
        students = Student.query.get(4)
     
    first()
        # 获取年龄最大的一个
        stus = Student.query.order_by('-s_age').first()
     
        
    逻辑运算
        与
            and_
            filter(and_(条件),条件…)
        
        或
            or_
            filter(or_(条件),条件…)
        
        非
            not_
            filter(not_(条件),条件…)
     
    例子:
    and_  
        students = Student.query.filter(Student.s_age==16,
                                        Student.s_name.contains(''))
     
        students = Student.query.filter(and_(Student.s_age==16,
                                        Student.s_name.contains('')))
     
    not_
        students = Student.query.filter(or_(Student.s_age==16,
                                        Student.s_name.contains('')))
    or_
        students = Student.query.filter(not_(Student.s_age==16),
                                        Student.s_name.contains(''))
     
        
        
    注意: 
    1. fliter和filter_by的结果可遍历
    2. 可以通过对其结果使用all()方法将其转换成一个列表或者first()转换成objects对象。
    3. all()获得的是列表,列表没有first()方法
    4. fliter和filter_by有flrst()方法,没有last方法
        

    数据的添加

    在flask中修改数据后需要添加事务和提交事务

    事务: 完整,一致,持久,原子
    第一种:保存数据
    将数据放入缓存
    db.session.add(stu)
    将缓存中的数据提交
    db.session.commit()

    在学生表中添加数据

    @blue.route('/createstu/')
    def create_stu():
        s = Student()
        s.s_name = '小花'
        s.s_age = 19
     
        db.session.add(s)
        db.session.commit()
     
        return '添加成功'
        
    提交事务,使用commit提交我们的添加数据的操作

    批量创建数据

    批量添加数据时可以使用add()、add_list()添加事务
    add():
         db.session.add_all(stu)
         db.session.commit()
    stu是一个对象
         
         
    add_list():
        db.session.add_all(stus_list)
                db.session.commit()
    stus_list是一个列表,其每个元素都是一个对象

    第一种

    @app_blue.route('create_many_stu/',methods=['GET'])
    def create_many_stu():
    if request.method == 'GET':
        stu = Student()
        stus_list = []
        for i in range(5):
            stu = Student()
            stu.s_name = '小花%s' % random.randrange(10, 1000)
            stu.s_age = random.randint(10,20)
            stus_list.append(stu)
     
        db.session.add_all(stus_list)
        db.session.commit()
            # db.session.add(stu)
        # db.session.commit
        return '批量创建'
        
    db.session.add_all(stus_list)
    db.session.commit()
    将列表中的数据统一添加到缓存区中,并提交

    第二种

    第二种:重写init
     
    models中:
     
    def __init__(self, name, age):
        # 2,给对象赋值
        self.s_name = name
        self.s_age = age
     
     
    views中:
    @app_blue.route('create_many_stu_init/',methods=['GET'])
    def create_many_stu():
        if request.method == 'GET':
            stus_list = []
            for i in range(5):
                stu = Student('小花%s' % random.randrange(10,1000), random.randint(10,20))
                stus_list.append(stu)
     
            db.session.add_all(stus_list)
            db.session.commit()
     
                # db.session.add(stu)
            # db.session.commit
            return '批量创建成功'

    修改数据

    思路:获取到需要修改的对象,通过对象.属性的方式将属性重新赋值,然后使用commit提交事务

    写法1

    students = Student.query.filter_by(s_id=3).first()
     
    students.s_name = '哈哈'
     
    db.session.commit()

    写法2

    Student.query.filter_by(s_id=3).update({'s_name':'娃哈哈'})
     
    db.session.commit()

    删除数据

    格式:db.session.delete(对象)
         db.session.commit()
         
    注意:在修改数据(增删改)中如果使用commit()的话,只会修改本地缓存中的数据,数据库中的数据不会更新。
    必须使用:db.session.commit()

    写法1

    students = Student.query.filter_by(s_id=2).first()
    db.session.delete(students)
    db.session.commit()

    写法2

     
    students = Student.query.filter_by(s_id=1).all()
    db.session.delete(students[0])
    db.session.commit()
    模型
    和Django的区别:
        a. 模型中不定义数据库的表名:
            在django中默认表名为:'应用appming_模型名小写'
            在flask中默认的表名为:模型名的小写
        b. 主键自增字段:
            django中会默认创建自增的主键id
            flask中需要手动创建自增的id: id = db.Column(db.Integer, primary_key=True, autoincrement=True)
        c.查询所有数据的结果all()
            在django结果中查询的结果是QuerySet
            在flask中查询结果是List
        d.查询满足条件的数据的结果,filter()
            在django查询结果是QuerySet
            在flask中查询结果是baseQuery objects

    喜欢这篇文章?欢迎打赏~~

  • 相关阅读:
    转载: jQuery事件委托( bind() live() delegate()) [委托 和 绑定的故事]
    转载:CPU的位数和操作系统的位数
    javascript 过滤空格
    转载: js jquery 获取当前页面的url,获取frameset中指定的页面的url(有修改)
    转载:struts标签<s:date>的使用
    转载:s:if的用法
    解决cordova-plugin-actionsheet导致Android丑陋的问题
    ionic框架对Android返回键的处理
    解决魅族手机无法连接Mac调试
    谷歌开发者大会传达的8条关键信息
  • 原文地址:https://www.cnblogs.com/cangqinglang/p/13671412.html
Copyright © 2020-2023  润新知