1、数据查询
all():查询全部的数据,其结果是一个列表,每一个元素都是一个对象
students = Student.query.all()
2、条件过滤(精准查询)
过滤查询:
第一种: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)
3、条件过滤(模糊查询)
语法: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('_花%'))
4、筛选:
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_)
from sqlalcheny import and_
filter(and_(条件),条件…)
或(or_)
from sqlalcheny import or_
filter(or_(条件),条件…)
非(not_)
from sqlalcheny import 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方法