查詢過濾器:html
過濾器 | 功能 |
---|---|
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() | 原查詢分組,返回新查詢 |
查詢執行函數python
查詢執行方法 | 說明 |
---|---|
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() 不可以鏈式調用sql
@view.route('/all/') def all(): data = User.query.all() print(data) return '刪除數據'
類名.query.filter()數據庫
類名.query.filter(類名.屬性名 條件操做符 條件)flask
#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)
查詢成功 返回 對象app
查詢失敗 返回 None函數
data = User.query.get(10) #找到id=10的數據 print(data)
類名.query.filter(類名.屬性名.contains('值'))code
data = User.query.filter(User.username.contains('五'))
類名.query.filter(類名.屬性名.like('%值%'))orm
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)
安裝:htm
flask-script
flask-migrate
使用
from flask_migrate import Migrate,MigrateCommand migrate = 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