Flask下的模型層

2021-09-16 13:22:58 字數 1811 閱讀 7573

# 從flask_sqlclchemy中匯出sqlalchemy

from datetime import datetime

from flask_sqlalchemy import sqlalchemy as _sqlalchemy, basequery

from sqlalchemy import integer, column, smallinteger

# 子類繼承父類_sqlalchemy

from sqlalchemy.util.compat import contextmanager

class sqlalchemy(_sqlalchemy):

@contextmanager # 上下文管理器,實現_enter和_exit方法的省略

def auto_commit(self):

try:

yield

self.session.commit()

except exception as e:# 資料發生錯誤,則回滾

db.session.rollback()

raise e

# 重寫filter_by

class query(basequery):

def filter_by(self, **kwargs):# **kwargs是字典

if 'status' not in kwargs.keys():

kwargs['status'] = 1

# 原來的filter_by的功能

return super(query, self).filter_by(**kwargs)

# 實現模型對映到資料庫的方法,例項化

# query_class實現對原來的filter的覆蓋

db = sqlalchemy(query_class=basequery)

class base(db.model):# 在基類中繼承db.model

# 不會去想註冊乙個叫base的表

__abstract__ = true

# 記錄著模型建立的時間

creat_time = column('creat_time', integer)

# 設計乙個基類模型,實現小整數,實現軟刪除,軟刪除不是真的刪除,只是改變一下狀態

status = column(smallinteger, default=1)

def __init__(self):# 時間戳來記載當前時間

self.creat_time = int(datetime.now().timestamp())

def set_attrs(self, attrs_dict):

for key, value in attrs_dict.item():

# 用hasattr來判斷某個物件下面是不是包含某個屬性

# hasattr函式第乙個引數是傳入的引數,第二個是屬性

# id號不用更改

if hasattr(self, key) and key !='id':

# setattr實現動態賦值

setattr(self, key, value)

# 時間轉化函式

@property

def creat_datetime(self):

if self.creat_time:

return datetime.fromtimestamp(self.creat_time)

else:

return none

# 軟刪除

def delete(self):

self.status = 0

Flask 模型關係

在models中 建立乙個一的類 建立乙個一的類 class grade db.model id db.column db.integer,primary key true,autoincrement true,name db.column db.string 20 unique true 重點,r...

Django 模型層 模型

django內建模型方法 乙個模型包含了資料的字段和操作方法,每個模型對映為一張資料庫中的表 person models.py from django.db import models class person models.model first name models.charfield max...

Flask中模型使用

1 資料庫模型建好後,建立模型和資料庫之間的聯絡,利用flask scripts外掛程式。使用步驟為 開啟控制台,進入工程目錄,執行 python manage.py db init,python manage.py db migrate 生成遷移檔案 python manage.py db upg...