当前位置:   article > 正文

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

flask删除数据自动更新

数据的查询

  1. all():查询全部的数据,其结果是一个列表,每一个元素都是一个对象
  2. students = Student.query.all()
  3. 过滤查询:
  4. 第一种:filter,结果是baseQuery objects,
  5. 过滤条件的格式:对象.属性==
  6. studnets = Student.query.filter(Student.id==1)
  7. 第二种:filter_by,结果是baseQuery objects,可以进行遍历
  8. students = Student.query.filter_by(id=1)
  9. 第三种:原生sql查询id=1的信息,结果是一个可以遍历的对象
  10. sql = 'select * from student where id=1;'
  11. students = db.session.execute(sql)
  12. 模糊查询:
  13. 语法:filter(模型名.属性.运算符('xx'))
  14. 运算符:
  15. contains:包含
  16. startswith:以什么开始
  17. endswith:以什么结束
  18. in_:在范围内
  19. like:模糊
  20. __gt__: 大于
  21. __ge__:大于等于
  22. __lt__:小于
  23. __le__:小于等于
  24. 例子:
  25. # 模糊查询,查询姓名中包含小花的学生信息
  26. # django中filter(s_name__contains='小花')
  27. students = Student.query.filter(Student.s_name.contains('小花'))
  28. # 以什么开始
  29. students = Student.query.filter(Student.s_name.startswith('小'))
  30. # 以什么结束
  31. students = Student.query.filter(Student.s_name.endswith('1'))
  32. # 查询年龄大于等于16的学生信息
  33. students = Student.query.filter(Student.s_age.__gt__(15))
  34. # 查询id在1020之间的学生的学生信息
  35. students = Student.query.filter(Student.s_age.in_([10,11,12]))
  36. # 查询年龄小于17的学生信息
  37. Student.query.filter(Student.s_age < 17)
  38. students = Student.query.filter(Student.s_age.__lt__(17))
  39. # 模糊查询,使用like,查询姓名中第二位为花的学生信息
  40. # like '_花%',_代表必须有一个数据,%任何数据
  41. students = Student.query.filter(Student.s_name.like('_花%'))
  42. 筛选:
  43. offset()
  44. # 跳过3个数据
  45. stus = Student.query.offset(3)
  46. limit()
  47. # 跳过3个数据,查询5个信息
  48. stus = Student.query.offset(3).limit(5)
  49. order_by()
  50. # 按照id降序,升序
  51. students = Student.query.order_by('id')
  52. students = Student.query.order_by('-id')
  53. students = Student.query.order_by(desc('id'))
  54. students = Student.query.order_by(asc('id'))
  55. students = Student.query.order_by('id desc')
  56. students = Student.query.order_by('id asc')
  57. get()
  58. #使用get,获取id=1的学生对象,get()默认接收id
  59. # 拿不到值不会报错,返回空
  60. students = Student.query.get(4)
  61. first()
  62. # 获取年龄最大的一个
  63. stus = Student.query.order_by('-s_age').first()
  64. 逻辑运算
  65. and_
  66. filter(and_(条件),条件…)
  67. or_
  68. filter(or_(条件),条件…)
  69. not_
  70. filter(not_(条件),条件…)
  71. 例子:
  72. and_
  73. students = Student.query.filter(Student.s_age==16,
  74. Student.s_name.contains('花'))
  75. students = Student.query.filter(and_(Student.s_age==16,
  76. Student.s_name.contains('花')))
  77. not_
  78. students = Student.query.filter(or_(Student.s_age==16,
  79. Student.s_name.contains('花')))
  80. or_
  81. students = Student.query.filter(not_(Student.s_age==16),
  82. Student.s_name.contains('花'))
  83. 注意:
  84. 1. fliter和filter_by的结果可遍历
  85. 2. 可以通过对其结果使用all()方法将其转换成一个列表或者first()转换成objects对象。
  86. 3. all()获得的是列表,列表没有first()方法
  87. 4. fliter和filter_by有flrst()方法,没有last方法

数据的添加

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

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

在学生表中添加数据

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

批量创建数据

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

第一种

  1. @app_blue.route('create_many_stu/',methods=['GET'])
  2. def create_many_stu():
  3. if request.method == 'GET':
  4. stu = Student()
  5. stus_list = []
  6. for i in range(5):
  7. stu = Student()
  8. stu.s_name = '小花%s' % random.randrange(10, 1000)
  9. stu.s_age = random.randint(10,20)
  10. stus_list.append(stu)
  11. db.session.add_all(stus_list)
  12. db.session.commit()
  13. # db.session.add(stu)
  14. # db.session.commit
  15. return '批量创建'
  16. db.session.add_all(stus_list)
  17. db.session.commit()
  18. 将列表中的数据统一添加到缓存区中,并提交

第二种

  1. 第二种:重写init
  2. models中:
  3. def __init__(self, name, age):
  4. # 2,给对象赋值
  5. self.s_name = name
  6. self.s_age = age
  7. views中:
  8. @app_blue.route('create_many_stu_init/',methods=['GET'])
  9. def create_many_stu():
  10. if request.method == 'GET':
  11. stus_list = []
  12. for i in range(5):
  13. stu = Student('小花%s' % random.randrange(10,1000), random.randint(10,20))
  14. stus_list.append(stu)
  15. db.session.add_all(stus_list)
  16. db.session.commit()
  17. # db.session.add(stu)
  18. # db.session.commit
  19. return '批量创建成功'

修改数据

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

写法1

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

写法2

  1. Student.query.filter_by(s_id=3).update({'s_name':'娃哈哈'})
  2. db.session.commit()

删除数据

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

写法1

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

写法2

  1. students = Student.query.filter_by(s_id=1).all()
  2. db.session.delete(students[0])
  3. db.session.commit()
  1. 模型
  2. 和Django的区别:
  3. a. 模型中不定义数据库的表名:
  4. 在django中默认表名为:'应用appming_模型名小写'
  5. 在flask中默认的表名为:模型名的小写
  6. b. 主键自增字段:
  7. django中会默认创建自增的主键id
  8. flask中需要手动创建自增的id: id = db.Column(db.Integer, primary_key=True, autoincrement=True)
  9. c.查询所有数据的结果all()
  10. 在django结果中查询的结果是QuerySet
  11. 在flask中查询结果是List
  12. d.查询满足条件的数据的结果,filter()
  13. 在django查询结果是QuerySet
  14. 在flask中查询结果是baseQuery objects
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/788291
推荐阅读
相关标签
  

闽ICP备14008679号