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

复制代码

模型

相关推荐
恒悦sunsite6 小时前
Ubuntu之apt安装ClickHouse数据库
数据库·clickhouse·ubuntu·列式存储·8123
奥尔特星云大使6 小时前
MySQL 慢查询日志slow query log
android·数据库·mysql·adb·慢日志·slow query log
来自宇宙的曹先生6 小时前
MySQL 存储引擎 API
数据库·mysql
间彧6 小时前
MySQL Performance Schema详解与实战应用
数据库
间彧6 小时前
MySQL Exporter采集的关键指标有哪些,如何解读这些指标?
数据库
weixin_446260857 小时前
Django - 让开发变得简单高效的Web框架
前端·数据库·django
mpHH7 小时前
babelfish for postgresql 分析--todo
数据库·postgresql
zizisuo7 小时前
解决在使用Lombok时maven install 找不到符号的问题
java·数据库·maven
程序边界9 小时前
国产之光!金仓数据库KingbaseES Oracle兼容性深度体验大赏
数据库·oracle
Roye_ack9 小时前
【项目实战 Day9】springboot + vue 苍穹外卖系统(用户端订单模块 + 商家端订单管理模块 完结)
java·vue.js·spring boot·后端·mybatis