1. 程式人生 > >Flask:06-一首歌的時間掌握flask數據模型(02)

Flask:06-一首歌的時間掌握flask數據模型(02)

.aspx nic 讀取數據 gen wrapper ddd ring awr 清除緩存

數據模型

模型關系

  • 一對多(使用最多)
    • 一:學生(Student)
      • 需要添加反向引用
    • 多:文章(Article)
      • 需要添加外鍵關聯
  • 一對一
    • 一:學生(Student),主表
      • 需要添加反向引用,在一對多的情況下多指定屬性userlist=False即可
    • 一:詳情(Profile),次表
      • 需要添加外鍵關聯
  • 多對多
    • 多:學生(Student)
      • 需要添加反向引用
      • 添加反向引用時需要通過secondary指定中間關聯表
      • 設置反向引用的查詢時機,可以通過db.backref完成
    • 多:課程(Course)
    • 中間關聯表:學生選課表,不需要進行操作和維護
      • 字段:表名、外鍵關聯

模型總結

  • 等價查詢

    @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()
        # 指定字段查詢,等價於上式
    ret = Student.query.with_entities(Student.id, Student.name).all() # 返回指定字段組成的元組構成的列表 print(ret) return ‘查詢結束‘
  • 分頁查詢:paginate,項目中講解。

  • 查看SQL日誌:就是查看執行過的SQL語句。

    # 記錄SQL日誌,需要滿足以下三個條件中的任意一個即可
    # app.config[‘DEBUG‘] = True
    # app.config[‘TESTING‘] = True
    app.config[‘SQLALCHEMY_RECORD_QUERIES‘
    ] = True from flask_sqlalchemy import get_debug_queries queries = get_debug_queries() for q in queries: print(q)

數據緩存

  • 說明:

    數據庫的速度是一個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)