Flask数据的增删改查(CRUD)_flask删除数据自动更新

查询年龄小于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_age16,
Student.s_name.contains('花')))
or_
students = Student.query.filter(not_(Student.s_age16),

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 = 19

复制代码
db.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.commit
return '批量创建'

db.session.add_all(stus_list)

db.session.commit()

将列表中的数据统一添加到缓存区中,并提交

复制代码
第二种

第二种:重写init

models中:

def init (self, name, age):

2,给对象赋值

self.s_name = name

self.s_age = age

views中:

@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.commit
    return '批量创建成功'


修改数据

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

复制代码
写法1

students = Student.query.filter_by(s_id=3).first()

students.s_name = '哈哈'

db.session.commit()

复制代码
写法2

Student.query.filter_by(s_id=3).update({'s_name':'娃哈哈'})

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()

复制代码

模型

相关推荐
老徐电商数据笔记几秒前
技术复盘第二篇:电商数据主题域划分企业级实践
大数据·数据库·数据仓库·零售·教育电商·技术面试
jfqqqqq2 分钟前
postgres查询、重设自增序列的起始值
数据库·sql·postgres·自增序列
10 分钟前
TIDB——PD(placement Driver)
java·数据库·分布式·tidb·
DemonAvenger17 分钟前
Redis与MySQL双剑合璧:缓存更新策略与数据一致性保障
数据库·redis·性能优化
断春风28 分钟前
如何避免 MySQL 死锁?——从原理到实战的系统性解决方案
数据库·mysql
闲人编程29 分钟前
基础设施即代码(IaC)工具比较:Pulumi vs Terraform
java·数据库·terraform·iac·codecapsule·pulumi
QQ_216962909636 分钟前
Spring Boot大学生社团管理平台 【部署教程+可完整运行源码+数据库】
java·数据库·spring boot·微信小程序
玉成22641 分钟前
MySQL两表之间数据迁移由于字段排序规则设置的不一样导致失败
数据库·mysql
dblens 数据库管理和开发工具1 小时前
DBLens:让 SQL 查询更智能、更高效的数据库利器
服务器·数据库·sql·数据库连接工具·dblens
TDengine (老段)1 小时前
TDengine 在新能源领域的最佳实践
大数据·数据库·物联网·时序数据库·tdengine·涛思数据