django是有orm操作的? 可想而知 那么flask也是有orm操作的,其实flask的orm操作的使用和djnago的是差不多的? django的orm操作进行条件筛选的时候后面跟着的是objects
查询集
原始查询集
类名.query得到的结果就为原始查询集
数据查询集
加上各种的过滤器的方法 最终返回的结果 为数据查询集 都使用数据查询集
? ???????????????????User.query.filter(User.username.in_(constraints)).limit(3).all()[<[User] username:`user0`, password:`0`, <[User]? ? ? ? ? ? ? ? ? ? ? username:`user3`, password:`3`, <[User] username:`user6`, password:`6`]>>>
????????????????????User.query.filter(User.username.notin_(constraints)).limit(3).all()[<[User] username:`m`, password:`password`,? ? ? ? ? ? ? ? ? ? ?[User] username:`user1`, password:`1`, <[User] username:`user2`, password:`2`]>>>
# 先传参进来string类型的起、止日期,然后直接丢进查询语句里面
mintime = mindate + ' ' + '0:0:0'
maxtime = maxdate + ' ' + '23:59:59'
record_list = RecordModel.query.filter(RecordModel.reporttime >= mintime).filter(
? ? ? ? ? ? ? ? ? ? RecordModel.reporttime <= maxtime).order_by(RecordModel.reporttime.desc()).all()
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__:小于等于
例子:
build_info = build.query.filter(build.create_time.__ge__("2019-09-05 11:42:11"), build.name==1).all()
# 模糊查询,查询姓名中包含小花的学生信息
# 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 = 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()
模型
和Django的区别:
? ? a. 模型中不定义数据库的表名:
? ? ? ? 在django中默认表名为:'应用appming_模型名小写'
? ? ? ? 在flask中默认的表名为:模型名的小写
? ? b. 主键自增字段:
? ? ? ? django中会默认创建自增的主键id
? ? ? ? flask中需要手动创建自增的id: id = db.Column(db.Integer, primary_key=True, autoincrement=True)
? ? c.查询所有数据的结果all()
? ? ? ? 在django结果中查询的结果是QuerySet
? ? ? ? 在flask中查询结果是List
? ? d.查询满足条件的数据的结果,filter()
? ? ? ? 在django查询结果是QuerySet
? ? ? ? 在flask中查询结果是baseQuery objects
---------------------
作者:HZ514
来源:CSDN
原文:https://blog.csdn.net/weixin_42750983/article/details/82431257
版权声明:本文为博主原创文章,转载请附上博文链接!