数据库Python

Python学习

2021-05-02  本文已影响0人  逛逛_堆栈

flask-sqlalchemy数据库操作(二)

1、数据查询

如何从数据库取回数据呢,使用模型类提供的query属性附加调用各种过滤方法及查询方法可以完成这个任务。
一般来说,一个完整的查询遵循下面的模式:
<模型类>.query.<过滤方法>.<查询方法>


查询方法
过滤方法

1.1、查询所有数据

# 查询所有的数据
    stus = Student.query.all()
    for stu in stus:
        print('编号:%d 姓名:%s 性别:%s 生日:%s 地址:%s' %(stu.id,stu.name,stu.sex,stu.birthday,stu.address))

1.2、过滤查询

第一种:filter,结果是baseQuery objects,
过滤条件的格式:对象.属性==值

stus = Student.query.filter(Student.id == 2)
   for stu in stus:
      print('编号:%d 姓名:%s 性别:%s 生日:%s 地址:%s' % (stu.id, stu.name, stu.sex, stu.birthday, stu.address))

第二种:filter_by,结果是baseQuery objects,可以进行遍历。

stus = Student.query.filter_by(id = 2)
    for stu in stus:
        print('编号:%d 姓名:%s 性别:%s 生日:%s 地址:%s' % (stu.id, stu.name, stu.sex, stu.birthday, stu.address))

第三种:原生sql查询id=1的信息,结果是一个可以遍历的对象。

sql = 'select * from db_student where id = 2'
    students = db.session.execute(sql)
    for stu in students:
      print('编号:%d 姓名:%s 性别:%s 生日:%s 地址:%s' % (stu.id, stu.name, stu.sex, stu.birthday, stu.address))

1.3、模糊查询

语法:filter(模型名.属性.运算符('xx'))
常用运算符:

       contains:包含
        startswith:以什么开始
        endswith:以什么结束
        in_:在范围内
        like:模糊
        __gt__: 大于
        __ge__:大于等于
        __lt__:小于
        __le__:小于等于

contains:包含

students = Student.query.filter(Student.name.contains('李'))
    for stu in students:
       print('编号:%d 姓名:%s 性别:%s 生日:%s 地址:%s' % (stu.id, stu.name, stu.sex, stu.birthday, stu.address))

in:在范围内

students = Student.query.filter(Student.id.in_([1, 2, 3]))
    for stu in students:
       print('编号:%d 姓名:%s 性别:%s 生日:%s 地址:%s' % (stu.id, stu.name, stu.sex, stu.birthday, stu.address))

like:模糊查询

students = Student.query.filter(Student.name.like('_三%'))
    for stu in students:
       print('编号:%d 姓名:%s 性别:%s 生日:%s 地址:%s' % (stu.id, stu.name, stu.sex, stu.birthday, stu.address))

lt、小于

students = Student.query.filter(Student.birthday.__lt__('1991-06-06'))
    for stu in students:
        print('编号:%d 姓名:%s 性别:%s 生日:%s 地址:%s' % (stu.id, stu.name, stu.sex, stu.birthday, stu.address))

1.4、查询筛选

limit、限制查询的结果数量

students = Student.query.limit(2)
    for stu in students:
        print('编号:%d 姓名:%s 性别:%s 生日:%s 地址:%s' % (stu.id, stu.name, stu.sex, stu.birthday, stu.address))

offset、跳过几个数据

students = Student.query.offset(2)
    for stu in students:
        print('编号:%d 姓名:%s 性别:%s 生日:%s 地址:%s' % (stu.id, stu.name, stu.sex, stu.birthday, stu.address))

order_by、排序

students = Student.query.order_by(desc('birthday')).limit(1)
    # students = Student.query.order_by(asc('birthday')).limit(1)
    for stu in students:
        print('编号:%d 姓名:%s 性别:%s 生日:%s 地址:%s' % (stu.id, stu.name, stu.sex, stu.birthday, stu.address))

get、默认根据id获得数据

stu = Student.query.get(3)
    # for stu in students:
    print('编号:%d 姓名:%s 性别:%s 生日:%s 地址:%s' % (stu.id, stu.name, stu.sex, stu.birthday, stu.address))

first、获得第一个结果

stu = Student.query.order_by('birthday').first()
    #for stu in students:
    print('编号:%d 姓名:%s 性别:%s 生日:%s 地址:%s' % (stu.id, stu.name, stu.sex, stu.birthday, stu.address))

1.5、逻辑运算

逻辑与And

stus = Student.query.filter(and_(Student.sex == '女',Student.name.contains('四'))).all()
    for stu in stus:
       print('编号:%d 姓名:%s 性别:%s 生日:%s 地址:%s' % (stu.id, stu.name, stu.sex, stu.birthday, stu.address))

逻辑或

stus = Student.query.filter(or_(Student.id == 2,Student.id == 3)).all()
    for stu in stus:
        print('编号:%d 姓名:%s 性别:%s 生日:%s 地址:%s' % (stu.id, stu.name, stu.sex, stu.birthday, stu.address))

逻辑非

stus = Student.query.filter(not_(Student.id == 2)).all()
    for stu in stus:
        print('编号:%d 姓名:%s 性别:%s 生日:%s 地址:%s' % (stu.id, stu.name, stu.sex, stu.birthday, stu.address))
上一篇下一篇

猜你喜欢

热点阅读