数据的查询

all():查询全部的数据,其结果是一个列表,每一个元素都是一个对象students = Student.query.all()过滤查询:第一种:filter,结果是baseQuery objects,过滤条件的格式:对象.属性==值studnets = Student.query.filter(Student.id==1)第二种:filter_by,结果是baseQuery objects,可以进行遍历students = Student.query.filter_by(id=1)第三种:原生sql查询id=1的信息,结果是一个可以遍历的对象sql = 'select * from student where id=1;'students = db.session.execute(sql)模糊查询:语法:filter(模型名.属性.运算符('xx'))运算符:contains:包含startswith:以什么开始endswith:以什么结束in_:在范围内like:模糊__gt__: 大于__ge__:大于等于__lt__:小于__le__:小于等于例子:
# 模糊查询,查询姓名中包含小花的学生信息
# django中filter(s_name__contains='小花')students = Student.query.filter(Student.s_name.contains('小花'))# 以什么开始students = Student.query.filter(Student.s_name.startswith('小'))# 以什么结束students = Student.query.filter(Student.s_name.endswith('1'))# 查询年龄大于等于16的学生信息students = Student.query.filter(Student.s_age.__gt__(15))# 查询id在10到20之间的学生的学生信息students = Student.query.filter(Student.s_age.in_([10,11,12]))# 查询年龄小于17的学生信息Student.query.filter(Student.s_age < 17)students = Student.query.filter(Student.s_age.__lt__(17))# 模糊查询,使用like,查询姓名中第二位为花的学生信息
# like '_花%',_代表必须有一个数据,%任何数据students = Student.query.filter(Student.s_name.like('_花%'))筛选:offset()# 跳过3个数据stus = Student.query.offset(3)limit()# 跳过3个数据,查询5个信息stus = Student.query.offset(3).limit(5)order_by()# 按照id降序,升序students = Student.query.order_by('id')students = Student.query.order_by('-id')students = Student.query.order_by(desc('id'))students = Student.query.order_by(asc('id'))students = Student.query.order_by('id desc')students = Student.query.order_by('id asc')get()#使用get,获取id=1的学生对象,get()默认接收id# 拿不到值不会报错,返回空students = Student.query.get(4)first()# 获取年龄最大的一个stus = Student.query.order_by('-s_age').first()逻辑运算与and_filter(and_(条件),条件…)或or_filter(or_(条件),条件…)非not_filter(not_(条件),条件…)例子:
and_  students = Student.query.filter(Student.s_age==16,Student.s_name.contains('花'))students = Student.query.filter(and_(Student.s_age==16,Student.s_name.contains('花')))not_students = Student.query.filter(or_(Student.s_age==16,Student.s_name.contains('花')))
or_students = Student.query.filter(not_(Student.s_age==16),Student.s_name.contains('花'))注意:
1. fliter和filter_by的结果可遍历
2. 可以通过对其结果使用all()方法将其转换成一个列表或者first()转换成objects对象。
3. all()获得的是列表,列表没有first()方法
4. fliter和filter_by有flrst()方法,没有last方法

数据的添加

在flask中修改数据后需要添加事务和提交事务

事务: 完整,一致,持久,原子
第一种:保存数据
将数据放入缓存
db.session.add(stu)
将缓存中的数据提交
db.session.commit()

在学生表中添加数据

@blue.route('/createstu/')
def create_stu():s = Student()s.s_name = '小花's.s_age = 19db.session.add(s)db.session.commit()return '添加成功'提交事务,使用commit提交我们的添加数据的操作

批量创建数据

批量添加数据时可以使用add()、add_list()添加事务
add():db.session.add_all(stu)db.session.commit()
stu是一个对象add_list():db.session.add_all(stus_list)db.session.commit()
stus_list是一个列表,其每个元素都是一个对象

第一种

@app_blue.route('create_many_stu/',methods=['GET'])
def create_many_stu():
if request.method == 'GET':stu = Student()stus_list = []for i in range(5):stu = Student()stu.s_name = '小花%s' % random.randrange(10, 1000)stu.s_age = random.randint(10,20)stus_list.append(stu)db.session.add_all(stus_list)db.session.commit()# db.session.add(stu)# db.session.commitreturn '批量创建'db.session.add_all(stus_list)
db.session.commit()
将列表中的数据统一添加到缓存区中,并提交

第二种

第二种:重写initmodels中:def __init__(self, name, age):# 2,给对象赋值self.s_name = nameself.s_age = ageviews中:
@app_blue.route('create_many_stu_init/',methods=['GET'])
def create_many_stu():if request.method == 'GET':stus_list = []for i in range(5):stu = Student('小花%s' % random.randrange(10,1000), random.randint(10,20))stus_list.append(stu)db.session.add_all(stus_list)db.session.commit()# db.session.add(stu)# db.session.commitreturn '批量创建成功'

修改数据

思路:获取到需要修改的对象,通过对象.属性的方式将属性重新赋值,然后使用commit提交事务

写法1

students = Student.query.filter_by(s_id=3).first()students.s_name = '哈哈'db.session.commit()

写法2


students = Student.query.filter_by(s_id=1).all()
db.session.delete(students[0])
db.session.commit()

删除数据

格式:db.session.delete(对象)db.session.commit()注意:在修改数据(增删改)中如果使用commit()的话,只会修改本地缓存中的数据,数据库中的数据不会更新。
必须使用:db.session.commit()

写法1

students = Student.query.filter_by(s_id=2).first()
db.session.delete(students)
db.session.commit()

写法2


students = Student.query.filter_by(s_id=1).all()
db.session.delete(students[0])
db.session.commit()
模型
和Django的区别:a. 模型中不定义数据库的表名:在django中默认表名为:'应用appming_模型名小写'在flask中默认的表名为:模型名的小写b. 主键自增字段:django中会默认创建自增的主键idflask中需要手动创建自增的id: id = db.Column(db.Integer, primary_key=True, autoincrement=True)c.查询所有数据的结果all()在django结果中查询的结果是QuerySet在flask中查询结果是Listd.查询满足条件的数据的结果,filter()在django查询结果是QuerySet在flask中查询结果是baseQuery objects

python3 flask sqlalchemy 数据库操作相关推荐

  1. mysql flaskalchemy_python flask sqlalchemy 数据库mysql操作

    第一步app.py: # coding=utf-8 import urllib from flask import Flask from werkzeug.routing import BaseCon ...

  2. python SQLAlchemy数据库操作

    文章目录 1 增 2 删 3 改 4 基础查询 4.1 基础查询汇总 4.2 限制查询 4.3 计数 4.4 去重 4.5 排序 4.6 模糊查询 4.7 分组查询 4.8 聚合函数 5 多表查询 5 ...

  3. Flask使用Flask-SQLAlchemy操作MySQL数据库

    https://www.jianshu.com/p/6ae0d30a5539 前言: Flask-SQLAlchemy是一个Flask扩展,简化了在Flask程序中使用SQLAlchemy的操作.SQ ...

  4. python学习之flask sqlalchemy介绍和使用 表操作增删查改

    flask sqlalchemy介绍和使用 表操作增删查改 内容详细 1 sqlalchemy介绍和快速使用 1.1 介绍 # SQLAlchemy是一个基于Python实现的ORM框架# djang ...

  5. python propresql mysql_python数据库操作mysql:pymysql、sqlalchemy常见用法详解

    本文实例讲述了python数据库操作mysql:pymysql.sqlalchemy常见用法.分享给大家供大家参考,具体如下: 相关内容: 使用pymysql直接操作mysql 创建表 查看表 修改表 ...

  6. 【建议收藏】Flask系列教程(三)SQLAlchemy数据库

    数据库是一个网站的基础,在Flask中可以自由的使用MySQL.PostgreSQL.SQLite.Redis.MongoDB来写原生的语句实现功能,也可以使用更高级别的数据库抽象方式,如SQLAlc ...

  7. Flask ORM SQLAlchemy数据操作完整案例

    ORM ORM 全拼Object-Relation Mapping. 中文意为 对象-关系映射. 主要实现模型对象到关系数据库数据的映射. 比如:把数据库表中每条记录映射为一个模型对象 优点 只需要面 ...

  8. flask 数据库操作入门教程(一把梭)

    flask 数据库操作入门 安装数据库 mysql8.0 下载后一直点击下一步,设置好root密码 安装模块 pip install flask_sqlalchemy 连接数据库 还需要自己创建一个数 ...

  9. Python的数据库操作(Sqlalchemy)

    ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射.简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系.这样,我们要操作数据库,数据库中的表 ...

最新文章

  1. isinstance函数和@staticmethod用法
  2. abap中取内表中每一类中的一行的方法
  3. python人工智能——深度学习——TensorFlow基本介绍
  4. Java动态代理的两种实现方法
  5. Springboot应用中线程池配置教程(2021版)
  6. leetcode力扣23.括号生成
  7. 程序员 520 脱单指南!
  8. 1001. 害死人不偿命的(3n+1)猜想 (15)-PAT乙级真题
  9. 使用foobar2000批量修改视频封面,批量修改artist/album
  10. MAC下maven本地仓库配置
  11. 【转载】设备\Device\Harddisk0\D 有一个不正确的区块
  12. PNP和NPN三极管区别
  13. java 调用存储过程无反应_java调用存储过程无法取得返回参数
  14. 学习天才犹太人的经商法则
  15. 星际迷航的William Shatner发推文支持Vitalik Buterin
  16. win11什么时候发布的_2019年8月证券从业资格考试报名通知什么时候发布?
  17. XJTU_ 西安交通大学2020大学计算机作业-第六周
  18. Word之页眉和页脚设置(一)
  19. 罗振宇2021跨年演讲7:2060“碳中和”跟你有多大关系?
  20. hdmi接口线_HDMI接口如何区分?

热门文章

  1. N4 接口是 5G 产业价值的金线
  2. 架构师之路 — 数据库设计 — 数据库复制的类别
  3. 架构师之路 — API 经济 — 身份认证系统
  4. Python 2 和 3 的区别及兼容技巧
  5. windows下对路由表的操作命令
  6. 树上边分治-求任意两点路径的总和
  7. 搜索suggest实现 动态的查询建议
  8. UBI系统原理分析【转】
  9. RAC对单实例DG redo大小日志修改
  10. mysql asyn 示例