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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值