SQLAlchemy_ORM_类继承(抽象类)

类对象:

  1. 时间模型类
  2. 用户抽象基类(继承用户抽象类)
  3. 生产者类(继承用户类)
  4. 消费者类(继承用户类)

代码示例:

# -*- coding:utf-8 -*-


from sqlalchemy import func, ForeignKey, Column
from sqlalchemy.orm import relationship
from sqlalchemy.types import String, Integer, DateTime, DECIMAL
from sqlalchemy.dialects.mysql import TINYINT
from dal.db_configs import MapBase


class TimeBaseModel(object):
    """模型基类,为模型补充创建时间与更新时间"""

    create_time = Column(DateTime, nullable=False, default=func.now())  # 记录的创建时间
    update_time = Column(DateTime, nullable=False, default=func.now(), onupdate=func.now())  # 记录的更新时间


class User(TimeBaseModel, MapBase):
    """基础用户抽象基类"""
    __abstract__ = True

    id = Column(Integer, primary_key=True, nullable=False, autoincrement=True)
    phone = Column(String(32), unique=True, default=None)               # 手机号
    sex = Column(TINYINT, nullable=False, default=0)                    # 用户性别 0:未知 1:男 2:女
    nickname = Column(String(64), default="")                           # 用户昵称
    realname = Column(String(128))                                      # 用户真实姓名
    headimgurl = Column(String(1024))                                   # 用户头像
    birthday = Column(Integer)                                          # 用户生日
    wx_country = Column(String(32))                                     # 用户所在国家


class Producer(User):
    """生产者"""
    __tablename__ = "producer"

    store = Column(Integer)                                             # 工厂库存

class Consumer(User):
    """消费者"""
    __tablename__ = "consumer"

    salary = Column(Integer)                                                # 用户工资

    producer_id = Column(Integer, ForeignKey(Producer.id), nullable=False)  # 消费者对应的生产者
    producer = relationship("Producer", foreign_keys="Consumer.producer_id")

# class Permission(TimeBaseModel, MapBase):
#     pass


# 数据库初始化
def init_db_data():
    MapBase.metadata.create_all()
    print("init db success")
    return True

这样做结果是:
缺一张图

继承中的类方法和静态方法
SQLAlchemy的ORM继承,在classmethod和staticmethod继承是和Python 面向对象(OOP)的继承方案一致的。
也就是说:

静态方法 (@staticmethod) 会被继承,但是在子类调用的时候,却是调用的父类同名方法。
类方法 (@classmethod) 会被继承,子类调用的时候就是调用子类的这个方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值