Flask的ORM方法

orm对象:

  • 非查询集通过db.session实现 必须手动提交
  • 查询通过db.query实现

非查询方法:

  • db.session.add(对象) 添加对象
  • db.session.add_all([obj1,obj2,...]) 增加所有
  • db.session.delete(obj) 删除对象
  • db.session.commit( ) 提交回话
  • db.session.rollback() 有异常可以设置回退
  • db.session.remove() 移除会话【释放空间】
def add_students():
    stu1 = Students(name='小红')
    stu2 = Students(name='小王')
    stu3 = Students(name='小张')
    stu4 = Students(name='小高')
    # db.session.add(stu4)
    db.session.add_all([stu1, stu2, stu3,stu4])
    db.session.commit()

修改:先查询再修改属性

def update_student():
    stu1 = Students.query.first()
    stu1.name = '老李'
    db.session.commit()

过滤器

(1) all 查询所有 以列表形式返回 不支持连贯操作

  类名.query.all()
  User.query.all()   # 查询User表中的所有数据

(2) filter() 过滤

  类名.query.filter([类名.属性名 条件操作符 值])

  User.query.filter() #返回所有

  User.query.filter(User.age>20) #查询年龄大于20的数据

  User.query.filter(User.age>20,User.age<40) #查询年龄大于20的数据 and 小于40

(3) filter_by 只支持参数为关键字参数

   类名.query.filter_by(属性名=值...)

   data = User.query.filter_by(id=2)

   data = User.query.filter_by(id>2) #错误写法 不可以使用模糊查到

   data = User.query.filter_by(id=2,age=27)

(4) offset 偏移量

  offset(num)

  User.query.filter().offset(2)

(5) limit 取值

  limit(num)

  User.query.filter(User.age>30).limit(2)   查到的结果只取两个

(6) offset和limit组合使用

  User.query.offset(2).limit(2)  也是只取两个

(7) order_by() 排序--->默认是升序

data = User.query.order_by(User.age) #升序
data = User.query.order_by(-User.age) #降序

(8) first 取出第一条数据 返回对象

User.query.first() == User.query.get(2)

(9) get 获取id对应的数据

  查询成功返回对象 查询失败 返回None

  User.query.get(2)

(10) contains 包含关系

  User.query.filter(User.username.contains('7'))    #username中包含数字7的数据

(11) like 模糊查询

  User.query.filter(User.username.like('李%')) #以李作为开头的

(12) startswith endswith 以...开头 以...结尾

  User.query.filter(User.username.startswith('李'))   # 以姓李的开头
  User.query.filter(User.username.endswith('6'))    # 以6为结尾的

(13) 比较运算符

  __gt__
  __ge__
  __lt__
  __le__
  >
  <
  >=
  <=
  ==
  !=

(14) in 和 not in

  User.query.filter(User.age.in_([27,12,1,30,40,50]))

(15) is null

  User.query.filter(User.username.isnot(None))

(16) and_
多个条件 用逗号隔开,为and操作

  from sqlalchemy import and_

  User.query.filter(and_(User.age==27,User.id==2))

(17) or_

  from sqlalchemy import or_

  @main.route('/and/')
  def myAnd():
      data = User.query.filter(or_(User.age==27,User.id==2))
      data = User.query.filter(and_(User.username.like('%6%')),or_(User.age>=27,User.id==2))    
      return render_template('show.html',data=data)

(18) not_

  from sqlalchemy import not_

  @main.route('/and/')
  def myAnd():    
      # data = User.query.filter(not_(User.age>27,User.id==1))\
      # 错误写法只能给一个条件取反
      data = User.query.filter(not_(User.age>27))
      return render_template('show.html',data=data)

(19) count 统计

  data = User.query.filter(not_(User.age>27)).count()
posted @ 2020-11-09 19:57  yiChen__Cui  阅读(128)  评论(0编辑  收藏  举报