既然我们选择了使用ORM框架,那就必须熟练掌握其提供的增删改查方法,在正式编写视图事前,本节内容我们先在shell环境中来了解和熟悉其增删改查的基础方法!
插入记录
这里我们以博客的分类为案例进行演示
1、首先设置环境变量,进入shell环境
至于如何导出环境变量请参考《安装并配置Flask-SQLAlchemy》章节,最后同步数据库字段相关内容!
2、运行如下命令进入shell环境
flask shell
3、导入模型数据
>>> from RealProject import db>>> from app.blog.models import Category, Post
插入一条分类记录
>>> cate = Category(name=’分类一’)>>> db.session.add(cate)>>> db.session.commit()>>> cate
以上就是插入向数据库插入一条记录的基本思路:
- 1、实例化模型的python对象
- 2、将该实例化对象添加到回话 db.session.add(cate)
- 3、提交该会话 db.session.commit()
查询记录
在查询之前我们先多添加几条分类数据的记录
- 拓展,批量插入数据的几种方法:http://www.lotdoc.cn/blog/detail/178/
>>> cates = [‘分类二’, ‘分类三’, ‘分类四’]>>> for name in cates:… cate = Category(name=name) … db.session.add(cate)… db.session.commit()…>>> Category.query.all()[, , , ]
查询最常用方法有:all()、first()、get()、filter()、order_by()
- 按分类名称检索
>>> cate1 = Category.query.filter_by(name=’分类一’).first()>>> cate1.id1>>> cate1.name’分类一’
这里如果传入的分类名称不存在则返回None!
- 通过更复杂的表达式查询多个分类:
>>> Category.query.filter(Category.name.endswith(‘分类’)).all()[]>>> Category.query.filter(Category.name.endswith(‘分类一’)).all() []>>> Category.query.filter(Category.name.endswith(‘2’)).all() []>>> Category.query.filter(Category.name.startswith(‘分’)).all() [, , , ]
模糊匹配某一个字段,endswith从字段的最后一个字符开始匹配,startswith从第一个字符开始匹配
- 按某字段进行排序:
>>> Category.query.order_by(Category.add_date).all()[, , , ]>>> Category.query.order_by(-Category.add_date).all()[, , , ]
- 限制查询数量
>>> Category.query.limit(1).all()[]>>> Category.query.limit(2).all() [, ]>>> Category.query.limit(3).all() [, , ]
- 按住键查询
>>> Category.query.get(1)
更新方法
>>> cate_2 = Category.query.get(2)>>> cate_2.name = ‘分类二new’>>> db.session.commit()
删除记录
>>> cate = Category.query.get(1)>>> db.session.delete(cate)>>> db.session.commit()
常用的查询和过滤方法
过滤方法 | 说明 |
filter() | 使用指定的规则过滤记录,返回新产生的查询对象 |
filter_by() | 使用指定规则过滤记录(以关键字表达式的形式),返回新产生的查询对象 |
order_by() | 根据指定条件对记录进行排序,返回新产生的查询对象 |
group_by() | 根据指定条件对记录进行分组,返回新产生的查询对象 |
下面是一些常用的查询方法:
查询方法 | 说明 |
all() | 返回包含所有查询记录的列表 |
first() | 返回查询的第一条记录,如果未找到,则返回 None |
get(id) | 传入主键值作为参数,返回指定主键值的记录,如果未找到,则返回 None |
count() | 返回查询结果的数量 |
first_or_404() | 返回查询的第一条记录,如果未找到,则返回 404 错误响应 |
get_or_404(id) | 传入主键值作为参数,返回指定主键值得记录,如果未找到,则返回 404 错误响应 |
paginate() | 返回一个 Pagination 对象,可以对记录进行分页处理 |