赞
踩
数据的查询
- 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。