flask 数据库查询

1.查询:

查询所有: 
    user_list= user.query,all()  user_list =列表

    模型类.query.all()    ~  select * from user;

如果有条件的查询:
         模型类.query.filter_by(字段名 = 值)   ~  select * from user where 字段=值;

         模型类.query.filter_by(字段名 = 值).first()  #取列表的第一个值 

select * from user where age>17 and gender='男';
select * from user where username like 'zhang%';
select * from user where rdatetime> xxx and rdatetime < xxx;

         模型类.query.filter()  里面是布尔的条件   模型类.query.filter(模型名.字段名 == 值)

         模型类.query.filter_by()  里面是一个等值   模型类.query.filter_by(字段名 = 值)


***** 模型类.query.filter() ******

1. 模型类.query.filter().all()   -----> 列表

2. 模型类.query.filter().first()  ----->对象

3.User.query.filter(User.username.endswith('z')).all()   #username字段以z结尾的所有
select * from user where username like '%z';

  User.query.filter(User.username.startswith('z')).all()  #username字段以z开头的所有
# select * from user where username like 'z%';

  User.query.filter(User.username.contains('z')).all()  #username字段中含有z的所有
# select * from user where username like '%z%';

  User.query.filter(User.username.like('z%')).all()     #模糊匹配

  多条件:

  from sqlalchemy import or_, and_,not_

  并且: and_    或者: or_   非: not_

  User.query.filter(or_(User.username.like('z%'), User.username.contains('i'))).all()
   类似: select * from user where username like 'z%' or username like '%i%';

  User.query.filter(and_(User.username.contains('i'), User.rdatetime.__gt__('2020-05-25 10:30:00'))).all()
   # select * from user where username like '%i%' and rdatetime < 'xxxx'

  补充:__gt__,__lt__,__ge__(gt equal),__le__ (le equal)  ----》通常应用在范围(整型,日期)
       也可以直接使用 >  <  >=  <=  !=

  User.query.filter(not_(User.username.contains('i'))).all()

  18 19 20 17 21 22 ....
  select * from user where age in [17,18,20,22];


排序:order_by

user_list = User.query.filter(User.username.contains('z')).order_by(-User.rdatetime).all()  # 先筛选再排序
    user_list = User.query.order_by(-User.id).all()  对所有的进行排序
    注意:order_by(参数):
    1。 直接是字符串: '字段名'  但是不能倒序
    2。 填字段名: 模型.字段    order_by(-模型.字段)  倒序

限制: limit

    # limit的使用 + offset
    # user_list = User.query.limit(2).all()   默认获取前两条
    user_list = User.query.offset(2).limit(2).all()   跳过2条记录再获取两条记录


 总结:


 1. User.query.all()                     所有
 2. User.query.get(pk)                   #根据主键查询
 3. User.query.filter()   *   ???????
     如果要检索的字段是字符串(varchar,db.String):
       User.username.startswith(' z')       #以什么z字母开头
       User.username.endswith(' z')                 #以什么z字母结尾头
       User.username.contains('z')                     #包含z
       User.username.like('   %z')                          #模糊匹配     
       User.username.in_(['','',''])                            #在这个中括号中
       User.username == 'zzz'                            #
    如果要检索的字段是整型或者日期类型:
       User.age.__lt__(18)                   
       User.rdatetime.__gt__('.....')
       User.age.__le__(18)
       User.age.__ge__(18)
       User.age.between(15,30)

     多个条件一起检索: and_, or_
     非的条件: not_

     排序:order_by()
     获取指定数量: limit() offset()
 4. User.query.filter_by(字段名=‘’)


 删除:
 两种删除:
 1。逻辑删除(定义数据库中的表的时候,添加一个字段isdelete,通过此字段控制是否删除)
 id = request.args.get(id)
 user = User.query.get(id)
 user.isdelete = True
 db.session.commit()

 2。物理删除(彻底从数据库中删掉)
 id = request.args.get(id)
 user = User.query.get(id)
 db.session.delete(user)
 db.session.commit()


 更新:
 id = request.args.get(id)
 user = User.query.get(id)
 # 修改对象的属性
 user.username= xxxx
 user.phone =xxxx
 # 提交更改
 db.session.commit()


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值