資料模型續

2022-06-25 13:06:14 字數 3367 閱讀 9227

# 資料模型

### 模型關係

-一對多(使用最多)

-一:學生(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 資料操作 資料模型中資料操作主要描述在相應的資料結構...