Flask ORM操作
基本查询操作
#select name from user
User.query(User.name).all()
#匹配id=10的记录
User.query.filter(User.id==10).all()
User.query.get(10)#等同上句
#获取第一条记录
User.query.all().first()
常用查询操作
#计数
User.query.all().count()
#排序(升序)
User.query.order_by(User.age).all()
#排序(降序)
User.query.order_by(User.age).all()
#匹配name包含123
User.query.filter(User.name.contains('123'))
#模糊搜索
User.query.filter(User.name.like('%123%'))
#匹配id小于10的记录
User.query.filter(User.id.__lt__(10))
User.query.filter(User.id. < 10)
#匹配id小于等于10的记录
User.query.filter(User.id.__le__(10))
User.query.filter(User.id. <= 10)
#匹配id大于10的记录
User.query.filter(User.id.__gt__(10))
User.query.filter(User.id. > 10)
#匹配id大于等于10的记录
User.query.filter(User.id.__ge__(10))
User.query.filter(User.id. >= 10)
##匹配id在[10,12,15,17,20]的记录
User.query.filter(User.id.in_([10,12,15,17,20])
#匹配id不在[10,12,15,17,20]的记录
User.query.filter(User.id.notin_([10,12,15,17,20])
#匹配id不等于10的记录
User.query.filter(User.id != 10).all()
#匹配name为空的记录
User.query.filter(User.id.is_(None)).all()
#匹配name不为空的记录
User.query.filter(User.id.isnot(None)).all()
进阶查询操作
from sqlalchemy import and_,or_,not_
#and,匹配id>3和name=DragonFire
User.query.filter(and_(User.id > 3, User.name =='DragonFire')).all()
#or,匹配id>3或者name=DragonFire
User.query.filter(or_(User.id > 3, User.name =='DragonFire')).all()
#分组统计
User.query.filter(User.age,func.count(User.id)).group_by(User.age)
#使用not_匹配id小于10的记录
User.query.filter(not_(User.id >= 10)).all() #注意not只能对一个条件取反
分页
#方式1 limit(每页显示大小),offset(开始索引)
User.query.all().limit(page_size).offset((current_page-1)*page_size)
#方式2 slice(开始索引,结束索引)
User.query.all().slice((current_page-1)*page_size,current_page*page_size)
#方式3 paginate(当前页数,每页显示大小)
User.query.all().paginate(current_page,page_size)
添加操作
1.添加单条记录
User(id=10,name='flask')
db.session.commit()
2.批量添加记录
#方式1 性能较差
to_insert_user=[]
for i in range(10):
to_insert_user.append(User(id=i, name='123'))
db.session.bulk_save_object(to_insert_user)
db.session.commit()
#方式2 性能较好
to_insert_user=[]
for i in range(10):
to_insert_user.append(dict(id=i, name='123'))
db.session.bulk_insert_mappings(User,to_insert_user)
db.session.commit()
#方式3 性能最好
to_insert_user=[]
for i in range(10):
to_insert_user.append(dict(id=i, name='123'))
db.session.execute(User.__table__.insert(),to_insert_user)
db.session.commit()
删除操作
User.query.filter(id=10).delete()
修改操作
User.query.filter(id=11).update(name='django11')
db.session.commit()