Flask SQLAlchemy数据库操作--查询(3)

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方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值