类对象:
- 时间模型类
- 用户抽象基类(继承用户抽象类)
- 生产者类(继承用户类)
- 消费者类(继承用户类)
代码示例:
# -*- 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) 会被继承,子类调用的时候就是调用子类的这个方法。