本文共 5908 字,大约阅读时间需要 19 分钟。
查询过滤器:
过滤器 | 功能 |
---|---|
cls.query.filter(类名.属性名 条件操作符 条件) | 过滤特定条件,返回的是query对象 |
cls.query.filter_by(关键字参数对) | 单条件查询,条件必须关键字参数,而且and连接 |
cls.query.offset(num)/查询集对象.offset(num) | 针对filter查询集对象偏移 |
cls.query.limit(num) | 针对查询集取两条数据 |
cls.query.order_by(属性名).limit(num)cls.query.order_by( -属性名).limit(num) | 按属性名排序,取limit(num) 升序排列按属性名排序,取limit(num) 降序排列 |
cls.query.groupby() | 原查询分组,返回新查询 |
查询执行函数
查询执行方法 | 说明 |
---|---|
cls.query.all() | 所有的数据查询集,返回对象列表,不能链式调用 |
cls.query.first() | 取第一个 |
cls.query.get(值) User.query.get(10) | 取得id的值对应的数据 |
cls.query.filter().count() | 返回查询结果数量 |
cls.query.filter().paginate() | 返回paginate对象,此对象用于分页 |
cls.query.filter(类名.属性名.like(‘%值%’)) | like模糊查询 |
cls.query.filter(类名.属性名.contains(‘值’)) | contains包含某个值 |
cls.query.filter(User.username.startswith(‘张’)) | startswith 以…开头/endswith以…结尾 |
cls.query.filter(User.id.in_([list])) | in_ 和 not in 是否包含某个范围内 |
cls.query.filter(User.id.is_(None)) | is_ isnot 查询为null/不为null 的数据 |
类名.query.all() 不能够链式调用
@view.route('/all/')def all(): data = User.query.all() print(data) return '删除数据'
类名.query.filter()
类名.query.filter(类名.属性名 条件操作符 条件)
#filter 获取所有数据查询集@view.route('/filter/')def filter(): # data = User.query.filter() # data = User.query.filter(User.username=='王五') data = User.query.filter(User.username=='王五',User.sex==False) print(data) for i in data: print(i.username,i.sex) return '删除数据'
@view.route('/filter_by/')def filter_by(): # data = User.query.filter_by() data = User.query.filter_by(age=18) #只能为下面这种关键字的用法 且多个添加为and操作 # data = User.query.filter_by(username='王五',sex=False)
@view.route('/offset/')def offset(): # data = User.query.filter().offset(1) # data = User.query.filter().offset(2) #错误的用法 data = User.query.all().offset(2) # print(User.query.filter()) # print(data) # for i in data: # print(i.username,i.sex) return '删除数据'
@view.route('/offsetlimit/')def offsetlimit(): data = User.query.offset(2).limit(2) print(data) for i in data: print(i.username,i.sex) return 'limit'
@view.route('/orderby/')def orderby(): #升序 data = User.query.order_by(User.age).limit(1) #降序 data = User.query.order_by(-User.age).limit(1)
@view.route('/first/')def first(): # data = User.query.first() == User.query.get(1) # data = User.query.order_by(-User.age).first() data = User.query.order_by(User.age).first() print(data.age) print(data.username) # for i in data: # print(i.username,i.sex)
查询成功 返回 对象
查询失败 返回 None
data = User.query.get(10) #找到id=10的数据print(data)
类名.query.filter(类名.属性名.contains(‘值’))
data = User.query.filter(User.username.contains('五'))
类名.query.filter(类名.属性名.like(‘%值%’))
data = User.query.filter(User.username.like('%张%')) #包含张data = User.query.filter(User.username.like('%张')) #以张作为结尾 data = User.query.filter(User.username.like('张%')) #以张作为开头
data = User.query.filter(User.username.startswith('张')) #以 张作为开头data = User.query.filter(User.username.endswith('张')) #以张作为结尾
1. __gt__ 大于2. __ge__ 大于等于3. __lt__ 小于4. __le__ 小于等于5. > <6. >= <=7. != ==
data = User.query.filter(User.id>1) #查询id大于1的数据data = User.query.filter(User.id.__gt__(1)) #查询id大于1的数据data = User.query.filter(User.id.__ge__(1)) #查询id大于1的数据data = User.query.filter(User.id>=1) #查询id大于1的数据data = User.query.filter(User.id<3) #查询id大于1的数据data = User.query.filter(User.id.__lt__(3)) #查询id大于1的数据
#in的使用@view.route('/in/')def myin(): data = User.query.filter(User.id.in_([1,2,3,4])) #在...范围内 data = User.query.filter(~User.id.in_([1,2,3,4])) #not in不再...范围内 data = User.query.filter(User.username.in_(['张三','王五'])) return render_template('show.html',data=data)
#对于null数据的处理@view.route('/null/')def null(): #查询为null数据的 data = User.query.filter(User.username.is_(None)) data = User.query.filter(User.username == None) data = User.query.filter(~User.username.isnot(None)) #查询不为null数据的 data = User.query.filter(~User.username.is_(None)) data = User.query.filter(User.username.isnot(None)) data = User.query.filter(User.username != None) return render_template('show.html',data=data)
@view.route('/count/')def mycount(): #统计性别为sex的数据条数 data = User.query.filter(not_(User.sex == True)).count() #统计所有数据的条数 data = User.query.filter().count() data = User.query.count() return '{}条数据'.format(data)
from sqlalchemy import and_,or_,not_
#逻辑操作@view.route('/and/')def myand(): data = User.query.filter(User.sex==True,User.age<20) data = User.query.filter(User.sex==True).filter(User.age<20) data = User.query.filter(and_(User.sex==True,User.age<20)) return render_template('show.html',data=data)
#逻辑操作@view.route('/or/')def myor(): #or data = User.query.filter(or_(User.sex==True,User.age<20),User.id.in_([1,2,3])) #and 和 or的 一起使用 data = User.query.filter(or_(User.sex==True,User.age<20)) return render_template('show.html',data=data)
#逻辑操作@view.route('/not/')def mynot(): data = User.query.filter(not_(User.sex==True)) #错误写法只能有一个条件 data = User.query.filter(not_(User.sex==True,User.id!=1)) data = User.query.filter(~User.sex==True) return render_template('show.html',data=data)
安装:
flask-script
flask-migrate
使用
from flask_migrate import Migrate,MigrateCommandmigrate = Migrate(app,db) #将app与db进行关联manager = Manager(app)manager.add_command('db',MigrateCommand) #给manage添加迁移文件的命令db
python3 manage.py db init
生成 一个 migrations
的迁移文件目录
python3 manage.py db migrate
python3 manage.py db upgrade
转载地址:http://lkcia.baihongyu.com/