搞懂flask_sqlalchemy常用操作

Posted cui_yonghua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搞懂flask_sqlalchemy常用操作相关的知识,希望对你有一定的参考价值。

一.查询:

1.1 查询所有

模型类.query.all() 等价于 select * from user
如果有条件的查询:
模型类.query.filter_by(字段名=值) --> select * from user where 字段名=值
模型类.query.filter_by(字段名=值).first() --> select * from user where 字段=值 limit=1

如:

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

注意:
模型类.query.filter() 里边是布尔的条件模型类.query.filter(模型名.字段名==值)
模型类.query.filter_by() 里边是一个等值模型类.query.filter_by(字段名=值)

1.2 模型类.query.filter()

1.模型类.query.filter().all()------------------>列表
2.模型类.query.filter().first()-------------->对象
如:

User.query.filter(User.username.endwith('z')).all() like '%z'
User.query.filter(User.username.startwith('z')).all() like 'z%'
User.query.filter(User.username.contains('z')).all() like '%z%'
User.query.filter(User.username.like('%z%')).all()

1.3 多条件:

或者:or_ 并且:and_ 非:not_

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

User.query.filter(and_(User.username.like('z%'),User.rdatetime > '2020-10-22 23:58:23')).all()
select * from user where username like 'z%' and rdatetime > '2020-10-22 23:58:23'

1.4 若过滤时间和整型:> ,< ,>=, <=,!=

age:17,18,19,20,22,23,25…

select * from user where age in [17,18,22]

1.5 排序:order_by

user_list=User.query.filter(User.username.contains('z')).order_by(-User.rdatetime).all()
user_list=User.query.order_by(-User.id).order_by(-User.rdatetime).all()

对所有得进行排序,注意order_by()的参数:
1.直接是字符串:‘字段名’ 这样不能排序
2.模型.字段名:模型.字段 order_by(-模型.字段) 倒叙 还可以使用desc()函数

1.6 限制:limit

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

Jquery CDN:引用网上的jQuery资源,加快速度,减少项目的复杂度和空间,更加方便与用户快速获取js效果。

查询小总结:
1.User.query.all() 所有
2.User.query.get(pk) 一个
3.User.query.filter() * ???
如果要检索的字段是字符串(varchar,db.String)
User.username.startwith(‘’)
User.username.endwitd(‘’)
User.username.contains(‘’)
User.username.like(‘’) 传入的参数需要加%
User.username.in_([‘’,‘’,‘’,‘’])
User.username==
如果要检索的字段是整型或日期类型:
User.age.lt(18) 双下划线
User.rdatetime.gt(‘…’)
User.age.le(18)
User.age.ge(18)
User.age.between(18,25)
多个条件一起检索:and_ or_
非得条件:or_

排序:order_by()
获取指定数量:limit() offset()
4.User.query.filter_by(username=‘xxx’) User.query.filter(username== ‘xxx’)

二. 删除

2.1 逻辑删除

其实就是更新(定义数据库中的表的时候,添加一个字段名为isdelete,通过此字段控制是否删除)
id=request.args.get(id) 用于接收get请求中的参数
user=User.query.get(id)
user.isdelete=True
db.session.commit()

2.2 物理删除

(彻底从数据库中删除)
id=request.args.get(id) 用于接收get请求中的参数,若为post就把args替换成form
user=User.query.get(id)
db.session.delete(user)
db.session.commit()

三. 更新

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

需要提交:
添加
user=User()
user.xxx=xxx
db.session.add(user)
db.session.commit()

删除
user=User.query.get(id)
db.session.delete(user)
db.session.commit()

更新
user=User.query.get(id) #获取数据库中的对象
#修改对象的属性
user.username=xxx
user.phone=xxx
#提交修改
db.session.commit()

以上是关于搞懂flask_sqlalchemy常用操作的主要内容,如果未能解决你的问题,请参考以下文章

倒叙索引

flask数据库操作(flask_sqlalchemy)

flask_sqlalchemy

flask_sqlalchemy join的正确使用方法

列表的常用操作及元祖

深入浅出Flask(51):flask_sqlalchemy的增删查改