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
48 lines
1.6 KiB
# !/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
|