增加数据

from .models import Goods
from app.extensions import db goods1 = Goods(name='魅族18s', price=3400, cate_id=4)
goods2 = Goods(name='华为P40', price=5200, cate_id=4)
goods3 = Goods(name='OPPO Note3', price=2759, cate_id=4) db.session.add(goods1) # 添加一条数据
db.session.add_all([goods2, goods3]) # 添加多条数据 db.commit() # 提交

查询数据

# 查询全部数据
goods = Goods.query.all() # 按照条件过滤, 结果为查询集,需要循环解析
goods = Goods.query.filter_by(name='华为P40') # 按照 id主键查询,得到商品对象, 不存在,结果为None
goods = Goods.query.get(1)
# 按照id查询,不存在,抛出404异常
goods = Goods.query.get_or_404(100)

修改数据

# 先查询对象,后修改属性,最后提交即可
goods = Goods.query.get(1)
goods.sales = 200
db.session.commit() # 使用filter_by先过滤,后传入字典更新,最后提交,此种方式,同时可以更新多条记录
Goods.query.filter_by(id=2).update({'stock':3000})
db.session.commit()

删除数据

# 先查询对象,后删除对象, 最后提交
goods6 = Goods.query.get(6)
db.session.delete(goods6)
db.session.commit() # 使用filter_by先过滤,后删除,最后提交,此种方式,同时可以删除多条记录
Goods.query.filter_by(id=5).delete()
db.session.commit()

查询高级操作

filter方法中,可以自定义查询操作,结果都是查询集

比较查询

# 查询id大于3的所有商品
goods = Goods.query.filter(Goods.id > 3).all() # 查询 id 不等于 3的所有商品
goods = Goods.query.filter(Goods.id != 3).all() # 查询 id不等于4的所有商品
goods = Goods.query.filter(not_(Goods.id == 4)).all()

逻辑查询

from sqlalchemy import or_, and_, not_

# 满足任何一个条件即可
goods = Goods.query.filter(or_(Goods.id < 2, Goods.id > 3)).all() goods = Goods.query.filter(Goods.id.in_([1, 3, 5]) ).all() # 必须多个条件同时成立
goods = Goods.query.filter(and_(Goods.id < 5, Goods.id > 2)).all() goods = Goods.query.filter(Goods.id.between(2, 6)).all() # 多个条件之间,默认就是 且的关系
goods = Goods.query.filter(Goods.id < 4, Goods.id > 2).all() # 查询相反结果
goods = Goods.query.filter(~(Goods.id < 4)).all()
goods = Goods.query.filter(not_(Goods.id < 4)).all() goods = Goods.query.filter(not_(Goods.id.in_([1, 3, 5]) )).all()

空查询

# 直接判断 值是否为None
cates = Cate.query.filter(Cate.parent_id==None).all()
# 使用 is_ 方法进行判断
cates = Cate.query.filter(Cate.parent_id.is_(None)).all()

模糊查询

# 查询商品名包含 魅族的 商品信息
goods = Goods.query.filter(Goods.name.like('%魅族%') ).all()

排序

from sqlalchemy import desc, asc

# 按照价格升序排序
goods = Goods.query.order_by('price').all()
goods = Goods.query.order_by(asc('price')).all() # 按照价格降序排序
goods = Goods.query.order_by(desc('price')).all()

分页

# 数据分页,第1页数据, 每页2条
pagination = Goods.query.order_by(desc('price')).paginate(1, 2)
# 当前页的数据
goods = paginaton.items
# 总的页码
pages = pagination.pages
# 总的记录数
total = pagination.total
# 当前页码
page = pagination.page

聚合

查询所有商品的 最大价格、最小价格、以及全部数量

from sqlalchemy import func 

res = db.session.query(func.max(Goods.price), func.min(Goods.price),  func.count(Goods.id) ).all()
# [(Decimal('5200.00'), Decimal('2759.00'), 4)] res = Goods.query.with_entities(func.max(Goods.price), func.min(Goods.price), func.count(Goods.id) ).all() # [(Decimal('5200.00'), Decimal('2759.00'), 4)]

分组

查询每类商品的 最大价格、最小价格、以及数量

res = db.session.query(Goods.cate_id,Cate.name, func.max(Goods.price), func.min(Goods.price),  func.count(Goods.id) ).filter(Goods.cate_id == Cate.id).group_by(Goods.cate_id).all()

res = Goods.query.join(Cate, Goods.cate_id==Cate.id).group_by(Goods.cate_id).with_entities(Cate.id, Cate.name, func.max(Goods.price), func.min(Goods.price),  func.count(Goods.id)).all()

res = Goods.query.filter(Goods.cate_id==Cate.id).group_by(Goods.cate_id).with_entities(Cate.id, Cate.name, func.max(Goods.price), func.min(Goods.price),  func.count(Goods.id)).all()

# [(4, '手机', Decimal('5200.00'), Decimal('3400.00'), 3), (5, '游戏手机', Decimal('2759.00'), Decimal('2759.00'), 1)]

修改高级操作

原基础上修改

实现批量修改

# 以下两种方式都可
res = Goods.query.filter(Goods.stock < 5000).update({'stock': Goods.stock + 2000})
res2 = Goods.query.filter(Goods.stock < 3000).update({Goods.stock: Goods.stock + 3000}) # 注意:更新之后,需要保存
db.session.commit()

修改单个

goods = Goods.query.get(3)
goods.stock -= 400
db.session.commit()

flask操作(增删改查操作)的更多相关文章

  1. Mybatis学习(二) - CRUD操作(增删改查操作)

    直接上例子: 1.项目结构: 2.具体代码及配置 User.java package com.mybatis.bean; public class User { private int id; pri ...

  2. SQLAlchemy02 /SQLAlchemy对数据的增删改查操作、属性常用数据类型详解

    SQLAlchemy02 /SQLAlchemy对数据的增删改查操作.属性常用数据类型详解 目录 SQLAlchemy02 /SQLAlchemy对数据的增删改查操作.属性常用数据类型详解 1.用se ...

  3. SQLAlchemy(二):SQLAlchemy对数据的增删改查操作、属性常用数据类型详解

    SQLAlchemy02 /SQLAlchemy对数据的增删改查操作.属性常用数据类型详解 目录 SQLAlchemy02 /SQLAlchemy对数据的增删改查操作.属性常用数据类型详解 1.用se ...

  4. mongoVUE的增删改查操作使用说明

    mongoVUE的增删改查操作使用说明 一. 查询 1. 精确查询 1)右键点击集合名,再左键点击Find 或者直接点击工具栏上的Find 2)查询界面,包括四个区域 {Find}区,查询条件格式{& ...

  5. (转)SQLite数据库增删改查操作

    原文:http://www.cnblogs.com/linjiqin/archive/2011/05/26/2059182.html SQLite数据库增删改查操作 一.使用嵌入式关系型SQLite数 ...

  6. 详谈easyui datagrid增删改查操作

    转自:http://blog.csdn.net/abauch_d/article/details/7734395 前几天我把easyui dadtagrid的增删改查的实现代码贴了出来,发现访问量达到 ...

  7. PHP程序中使用PDO对象实现对数据库的增删改查操作的示例代码

    PHP程序中使用PDO对象实现对数据库的增删改查操作(PHP+smarty) dbconn.php <?php //------------------------使用PDO方式连接数据库文件- ...

  8. 浅谈dataGridView使用,以及画面布局使用属性,对datagridview进行增删改查操作,以及委托使用技巧

        通过几天的努力后,对datagridview使用作一些简要的介绍,该实例主要运用与通过对datagridview操作.对数据进行增删改查操作时,进行逻辑判断执行相关操作.简单的使用委托功能,实 ...

  9. 05_Elasticsearch 单模式下API的增删改查操作

    05_Elasticsearch 单模式下API的增删改查操作 安装marvel 插件: zjtest7-redis:/usr/local/elasticsearch-2.3.4# bin/plugi ...

  10. JDBC连接数据库及增删改查操作

    什么是JDBC?Java语言访问数据库的一种规范,是一套APIJDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类 ...

随机推荐

  1. FPGA nios软核编写液晶屏LCD12864驱动程序源码以及注意事项,本人亲自踩坑,重要!!!

    LCD12864引脚如下: FPGA开发板得提供,3.3v电压,5v电压,普通io都是3.3v电压 DB:数据脚,得用双向io,因为程序里面需要读取液晶的应答(普通io3.3v可以) E:?输出引脚即 ...

  2. JDBC使用案例

    一.结果集中获取数据并对实体set值,封装成对象返回: 2.封装JDBC工具类 只要执行一次的,如读取配置文件,则写静态代码块: 异常抛出要写明方法才可以throw,静态代码块异常只能捕捉try ca ...

  3. git介绍-常用操作(一)

    Table of Contents 1  系列文章 2  git说明 3  git常用命令 3.1  基本操作 3.2  远程操作 4  查看git的配置 4.1  查看已配置项 4.2  其他配置 ...

  4. 使用 VSCode 给STM32配置一个串口 printf 工程

    使用 VSCode 给STM32配置一个串口 printf 工程 gcc 重定向 printf 和 keil 不一样. 文件准备 先从以前的工程中拷过一份串口的代码来,然后在 main 函数中初始化串 ...

  5. webpack learn2-vue的jsx写法和postcss 1

    首先输入命令安装 npm i postcss-loader autoprefixer babel-loader babel-core 在根目录创建文件 .babelrc和postcss.config. ...

  6. js判断访客来源网址和关键字

    加入现在有A.B两个站,A为友站,B为我站. 希望判断使用从A站连来时,就把访问者拒绝在门外,只要用简单几行的javascript,就可抓到使用的来源,以及作出一些防范的措施. <script ...

  7. Nginx系列(5)- nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)

    启动Windows版本的Nginx时候,cmd报错,报错信息为[emerg] 4276#4280: bind() to 0.0.0.0:80 failed(10013: An attempt was ...

  8. linux 服务器资源 监控工具

    工具一:vmstat(服务端) 一.vmstat选项参数解释 -V:显示vmstat版本信息 -n:只在开始时显示一次各字段名称 -a:显示活跃和非活跃内存 -d:显示各个磁盘相关统计信息 -D:显示 ...

  9. SVN与LDAP服务器整合验证

    说明:svn的访问是以svn://协议访问的,一般都是用http协议访问,所以要使用apache的httpd服务器apache已经添加了对ldap服务器的支持,所以svn的认证过程是使用apache代 ...

  10. css 背景图片路径问题

    背景图片路径找寻失败问题 1.加~ background-image: url("~@/assets/login/login-bg.png"); background-size: ...