学习笔记:flask_sqllalchemy中 orm 相关查询操作

优缺点:

优点:

只需要面向对象编程,不需要使用sql语言
实现数据模型和数据库的解藕,及不用关心是什么数据库,更改简单配置即可更换数据库。

缺点

有部分性能损耗

基本操作

插入

 1 # 创建模型类对象
 2 ro1 = Role(name='admin')
 3 # 执行add添加命令
 4 db.session.add(ro1)
 5 # 如果是多条数据(多个用于提交的模型类对象)可使用add_all提交列表数据
 6 # db.session.add_all([us1,us2,us3,us4,us5,us6,us7,us8,us9,us10])
 7 # 提交到数据库(未提交数据库不发生改变)
 8 db.session.commit()
 9 ————————————————
10 版权声明:本文为CSDN博主「jlb1024」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
11 原文链接:https://blog.csdn.net/jlb1024/article/details/81515155

查询

  • filter_by精确查询
  • 1 # 查询name是wang的所有对象
    2 User.query.filter_by(name='wang').all()
  • frist返回第一个对象 
  • 1 # 查询name是wang的第一个对象
    2 User.query.filter_by(name='wang').first()
  • all返回查询到所有对象(返回一个查询集合)
  • 1 # 查询name是wang的所有对象
    2 User.query.filter_by(name='wang').all()

    filter模糊查询

 

1 # 查询name结尾是‘g’的所有数据
2 User.query.filter(User.name.endswith('g')).all()
  • get查询主键
  • 1 # 查询主键ID为 1 的对象
    2 User.query.get(1)

 

  • 逻辑非查询
  • 1 # 返回name不是‘wang’的所有用户
    2 User.query.filter(User.name!='wang').all()
  • 逻辑与,需要导入and
  • 1 # 查询所有name是wang的并且emali以‘163.com’结尾的用户
    2 from sqlalchemy import and_
    3 User.query.filter(and_(User.name!='wang',User.email.endswith('163.com'))).all()
  • 逻辑或,需要导入or_
  • 1 # 查询所有name是wang或者emali以‘163.com’结尾的用户
    2 from sqlalchemy import or_
    3 User.query.filter(or_(User.name!='wang',User.email.endswith('163.com'))).all()
  • not_取反操作
  • 1 # name是chen的都不要,及取name是‘chen’的反
    2 from sqlalchemy import not_
    3 User.query.filter(not_(User.name=='chen')).all()

     

  • 一般查询操作总汇(包括其他部分查询)

  •  1  """
     2     查询所有用户数据
     3         User.query.all()
     4     查询有多少个用户
     5         User.query.count()
     6     查询第1个用户
     7         User.query.first()
     8     查询id为4的用户[3种方式]
     9         User.query.get(4)
    10         User.query.filter(User.id == 4).first()
    11         User.query.filter_by(id=4).first()
    12     查询名字结尾字符为g的所有数据[开始/包含]
    13         User.query.filter(User.name.endswith('g')).all()
    14         User.query.filter(User.name.startswith('g')).all()
    15         User.query.filter(User.name.contains('g')).all()
    16     查询名字不等于wang的所有数据[2种方式]
    17         User.query.filter(not_(Usme == 'wang')).all()
    18         User.query.filter(User.name != 'er.nawang').all()
    19     查询名字和邮箱都以 li 开头的所有数据[2种方式]
    20         User.query.filter(and_(User.name.startswith("li"), User.email.startswith("li"))).all()
    21         User.query.filter(User.name.startswith("li"), User.email.startswith("li")).all()
    22     查询password是 `123456` 或者 `email` 以 `itheima.com` 结尾的所有数据
    23         [User: 1 wang, User: 5 tang, User: 8 liu]
    24     查询id为 [1, 3, 5, 7, 9] 的用户列表
    25         User.query.filter(User.id.in_([1,3,5,7,9])).all()
    26     查询name为liu的角色数据
    27         user = User.query.filter(User.name == "liu").first()
    28         Role.query.get(user.role_id)
    29     查询所有用户数据,并以邮箱排序
    30         User.query.order_by(User.email).all()
    31         User.query.order_by(User.email.desc()).all()  倒序
    32     每页3个,查询第2页的数据
    33         User.query.paginate(2, 3, False).items
    34     """

     

 

————————————————

原文链接:https://blog.csdn.net/jlb1024/article/details/81515155

 

posted @ 2022-03-13 17:21  安兹•乌尔•恭  阅读(230)  评论(0)    收藏  举报