Flask下的模型层

Flask下的模型层


# 从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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值