You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.6 KiB

3 years ago
# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : base_class.py
# @Software : VSCode
# @Datetime : 2021/11/04 21:27:43
# @Author : leo liu
# @Version : 1.0
# @Description :
import uuid
from datetime import datetime
from sqlalchemy import Column, Integer, DateTime
from sqlalchemy.sql import func
from sqlalchemy.ext.declarative import as_declarative, declared_attr
@as_declarative()
class Base:
# 通用的字段
id = Column(Integer, unique=True, index=True, primary_key=True, autoincrement=True)
create_time = Column(DateTime, default=datetime.now, server_default=func.now(), comment="创建时间")
update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, server_default=func.now(),
server_onupdate=func.now(), comment="更新时间")
is_delete = Column(Integer, default=0, comment="逻辑删除:0=未删除,1=删除", server_default='0')
__name__: str
# Generate __tablename__ automatically
@declared_attr
def __tablename__(cls) -> str:
import re
# 如果没有指定__tablename__ 则默认使用model类名转换表名字
name_list = re.findall(r"[A-Z][a-z\d]*", cls.__name__)
# 表名格式替换成 下划线_格式 如 MallUser 替换成 mall_user
return "_".join(name_list).lower()
def getAttrFromName(self, attrName):
if hasattr(self, attrName):
return getattr(self, attrName)
else:
return getattr(self, "id")
def gen_uuid() -> str:
# 生成uuid
# https://stackoverflow.com/questions/183042/how-can-i-use-uuids-in-sqlalchemy?rq=1
return uuid.uuid4().hex