52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
# -*- coding: utf-8 -*-
|
||
# @Time : 2024/11/18 下午7:00
|
||
# @Author : 河瞬
|
||
# @FileName: models.py
|
||
# @Software: PyCharm
|
||
from sqlalchemy import create_engine, Column, Integer, String, DateTime, ForeignKey, Text
|
||
from sqlalchemy.orm import relationship, sessionmaker, declarative_base
|
||
from datetime import datetime
|
||
|
||
# 创建基类
|
||
Base = declarative_base()
|
||
|
||
|
||
class Tenant(Base):
|
||
__tablename__ = 'Tenant'
|
||
id = Column(Integer, primary_key=True)
|
||
name = Column(String(100), nullable=False)
|
||
users = relationship('User', back_populates='tenant', cascade='all, delete-orphan')
|
||
projects = relationship('Project', back_populates='owner', cascade='all, delete-orphan')
|
||
|
||
|
||
class User(Base):
|
||
__tablename__ = 'User'
|
||
id = Column(Integer, primary_key=True)
|
||
username = Column(String(100), nullable=False)
|
||
password = Column(String(100), nullable=False)
|
||
role = Column(Integer, nullable=False) # 0: 超级管理员 1:租户管理员 2:评估员 3:审核员
|
||
tenant_id = Column(Integer, ForeignKey('Tenant.id'), nullable=False)
|
||
tenant = relationship('Tenant', back_populates='users')
|
||
|
||
|
||
class Project(Base):
|
||
__tablename__ = 'Project'
|
||
id = Column(Integer, primary_key=True)
|
||
name = Column(String(100), nullable=False)
|
||
requirement = Column(String(200), nullable=True)
|
||
start_time = Column(DateTime, nullable=False, default=datetime.utcnow)
|
||
deadline = Column(DateTime, nullable=False)
|
||
owner_id = Column(Integer, ForeignKey('Tenant.id'), nullable=False)
|
||
owner = relationship('Tenant', back_populates='projects')
|
||
|
||
|
||
if __name__ == "__main__":
|
||
# 创建数据库引擎
|
||
engine = create_engine('sqlite:///test.db')
|
||
|
||
# 创建所有表
|
||
Base.metadata.create_all(engine)
|
||
|
||
# 创建会话
|
||
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|