Flask:06-一首歌的時間掌握flask數據模型(02)
阿新 • • 發佈:2018-10-05
.aspx nic 讀取數據 gen wrapper ddd ring awr 清除緩存
數據模型
模型關系
- 一對多(使用最多)
- 一:學生(Student)
- 需要添加反向引用
- 多:文章(Article)
- 需要添加外鍵關聯
- 一:學生(Student)
- 一對一
- 一:學生(Student),主表
- 需要添加反向引用,在一對多的情況下多指定屬性
userlist=False
即可
- 需要添加反向引用,在一對多的情況下多指定屬性
- 一:詳情(Profile),次表
- 需要添加外鍵關聯
- 一:學生(Student),主表
- 多對多
- 多:學生(Student)
- 需要添加反向引用
- 添加反向引用時需要通過
secondary
指定中間關聯表 - 設置反向引用的查詢時機,可以通過
db.backref
完成
- 多:課程(Course)
- 中間關聯表:學生選課表,不需要進行操作和維護
- 字段:表名、外鍵關聯
- 多:學生(Student)
模型總結
-
等價查詢
@app.route(‘/query/‘) def query(): # students = Student.query.all() # 等價於 students = db.session.query(Student).all() return ‘,‘.join(s.name for s in students)
-
指定字段查詢
@app.route(‘/select/‘) def select(): # ret = db.session.query(Student.id, Student.name).all() # 指定字段查詢,等價於上式
-
分頁查詢:paginate,項目中講解。
-
查看SQL日誌:就是查看執行過的SQL語句。
# 記錄SQL日誌,需要滿足以下三個條件中的任意一個即可 # app.config[‘DEBUG‘] = True # app.config[‘TESTING‘] = True app.config[‘SQLALCHEMY_RECORD_QUERIES‘
數據緩存
-
說明:
數據庫的速度是一個web應用的性能瓶頸,因此,為了提高訪問效率,應該盡可能減少數據庫的訪問。可以將經常訪問的數據緩存起來,每次訪問時先從緩存中獲取數據,若有直接返回;沒有再從數據庫中讀取。
-
flask-cache:專門負責數據緩存的擴展。
-
安裝:
pip install flask-cache
-
使用:
from flask_cache import Cache # 配置 # 緩存類型 app.config[‘CACHE_TYPE‘] = ‘redis‘ # 主機 app.config[‘CACHE_REDIS_HOST‘] = ‘127.0.0.1‘ # 端口 app.config[‘CACHE_REDIS_PORT‘] = 6379 # 數據庫 app.config[‘CACHE_REDIS_DB‘] = 1 # 創建對象 cache = Cache(app, with_jinja2_ext=False)
-
緩存視圖函數:
@app.route(‘/‘) # timeout:指定緩存有效期,默認300s # key_prefix:緩存鍵前綴,默認:view/ + 路由地址 @cache.cached(timeout=100, key_prefix=‘index‘) def index(): print(‘讀取數據庫‘) return ‘有效數據‘
-
緩存普通函數:
# 緩存普通函數,key_prefix必須指定 @cache.cached(timeout=100, key_prefix=‘common‘) def common(): print(‘查詢數據庫‘) return ‘返回的數據‘ @app.route(‘/hello/‘) def hello(): return common()
-
清除緩存
@app.route(‘/clear/‘) def clear(): # 指定刪除 # cache.delete(‘index‘) # 全部清空 cache.clear() return ‘緩存已清除‘
-
自定義緩存
@app.route(‘/zidingyi/‘) def zidingyi(): # 先從緩存中獲取 data = cache.get(‘zidingyi_data‘) if data: return data # 沒有緩存數據 print(‘從數據庫中獲取數據‘) data = ‘123456‘ # 緩存數據 cache.set(‘zidingyi_data‘, data, timeout=100) return data
?
Flask:06-一首歌的時間掌握flask數據模型(02)