# 資料模型### 模型關係
-一對多(使用最多)
-一:學生(student)
-新增反向引用
-多:文章(article)
-新增外來鍵關聯
-一對一
-一:學生(student)
- 新增反向引用(在一對多的基礎上多新增屬性:`uselist=false`)
-一:詳情(profile)
-新增外來鍵關聯
-多對多
-多:學生(student)
-需要新增反向引用
-需要使用`secondary`指定中間關聯表
-設定反向查詢資料的載入時機,需要使用:`db.backref`
-多:課程(course)
-中間關聯表:此表不需要使用者維護
-表名-關聯外來鍵
### 模型總結
-等價查詢
```python
'/query/')
def query():
# students =student.query.all()
# 與上面的方式等價
students =db.session.query(student).all()
return',
'.join(s.name for s in
students)
```-group_by:分組查詢
```python
'/group/')
def group():
from
sqlalchemy import func
ret =db.session.query(student.id, func.count(student.id)).group_by(student.id).all()
print(ret)
return
'分組查詢
'```
>分組查詢並統計。
-指定字段查詢
```python
'/select/')
def
select
(): # ret =db.session.query(student.id, student.name).all()
ret =student.query.with_entities(student.name).all()
print(ret)
return
'指定字段查詢
'```
-分頁查詢:paginate,專案中講解。
-sql日誌:就是檢視執行過的sql語句
```python
from
flask_sqlalchemy import get_debug_queries
# 記錄sql日誌,以下3個配置必須滿足乙個
# 除錯模式
'debug
'] =true
# 測試模式
'testing
'] =true
# 儲存記錄
'sqlalchemy_record_queries
'] =true
queries =get_debug_queries()
for q in
queries:
print(q)
```### 資料快取
-說明:
因為資料庫的速度是乙個web應用效能的瓶頸,因此,為了提高訪問效率,盡可能的減少資料庫的操作。可以將經常訪問的資料快取起來,再次使用時直接從快取中獲取,而不是每次都運算元據庫。
- flask-cache:專門負責資料快取的擴充套件。
- 安裝:`pip install flask-cache`
-使用:
```python
from
flask_cache import cache
# 配置
# 快取型別
'cache_type
'] = '
redis
'# redis主機
'cache_redis_host
'] = '
127.0.0.1
'# redis埠
'cache_redis_port
'] = 6379
# redis資料庫
'cache_redis_db
'] = 1
# 建立物件
```-快取檢視函式
```python
# timeout:有效期,預設為300s
# key_prefix:鍵字首
@cache.cached(timeout=100, key_prefix='
index')
def index():
print(
'查詢資料庫')
return
'資料快取
'```
-清除快取
```python
'/delete/')
def delete():
# 指定刪除
# cache.delete(
'index')
# 清空全部
cache.clear()
return
'快取已刪除
'```
-快取普通函式
```python
# 快取普通函式時最好指定key_prefix引數
# 因為不指定時,快取的鍵字首預設是呼叫的檢視函式所在路由
@cache.cached(timeout=10, key_prefix='
aaa'
) def aaa():
print(
'查詢資料庫')
return
'hello world
'# 快取普通函式
'/common/')
def common():
return
aaa()
```-自定義快取
```python
'/test/')
def test():
# 先從快取中獲取資料
data = cache.get('
test_data')
ifdata:
# 有快取,直接返回
return
data
# 沒有快取
print(
'讀取資料庫')
data = '
123456
'# 將資料快取起來
cache.
set('
test_data
', data, timeout=20
)
return
data
```
概念資料模型 邏輯資料模型 物理資料模型
概念資料模型設計與邏輯資料模型設計 物理資料模型設計是資料庫及資料倉儲模型設計的三個主要步驟。在資料倉儲領域有乙個概念叫conceptual data model,中文一般翻譯為 概念資料模型 概念資料模型是終端使用者對資料儲存的看法,反映了終端使用者綜合性的資訊需求,它以資料類的方式描述企業級的資...
概念資料模型,邏輯資料模型,物理資料模型
在資料倉儲領域有乙個概念叫conceptual data model,中文一般翻譯為 概念資料模型 概念資料模型是終端使用者對資料儲存的看法,反映了終端使用者綜合性的資訊需求,它以資料類的方式描述企業級的資料需求,資料類代表了在業務環境中自然聚集成的幾個主要類別資料。概念資料模型的內容包括重要的實體...
資料模型 概念資料模型,邏輯資料模型,物理資料模型
資料模型所描述的內容包括三個部分 資料結構 資料操作 資料約束。1 資料結構 資料模型中的資料結構主要描述資料的型別 內容 性質以及資料間的聯絡等。資料結構是資料模型的基礎,資料操作和約束都建立在資料結構上。不同的資料結構具有不同的操作和約束。2 資料操作 資料模型中資料操作主要描述在相應的資料結構...