flask-sqlalchemy的模型类两个表,既有一对一又有一对多的情况时,解决方法

这种情况时,直接进行数据迁移会回报错,因为一个表需要依赖另一个表,所以可以将两个表的基本字段先迁移好,然后再新增外键字段进行迁移,就不会报错了
python 复制代码
from datetime import datetime

from api.models.base import BaseModel
from api import db
from werkzeug.security import check_password_hash, generate_password_hash
import enum



class MyEnum(enum.Enum):
    UN_ACTIVE = 0  # 没有激活
    ACTIVE = 1  # 已经激活的
    LOCKED = 2  # 被锁定


class User(BaseModel, db.Model):
    __tablename__ = 'user'
    __table_args__ = {'comment': '用户表'}
    id = db.Column(db.Integer, primary_key=True, comment='用户id')
    realname = db.Column(db.String(12), unique=True, nullable=False, comment="用户名")
    pwd = db.Column(db.String(240), nullable=False, comment="用户密码")
    email = db.Column(db.String(20), unique=True, nullable=False, comment="用户邮箱")
    telephone = db.Column(db.String(20), comment="用户电话")
    is_staff = db.Column(db.Boolean, default=True, comment="是否为员工")
    status = db.Column(db.Enum(MyEnum), default=MyEnum.UN_ACTIVE, comment="员工状态")
    date_joined = db.Column(db.DateTime, default=datetime.now, comment="入职时间")

    # 员工所属的部门(多对一)
    department_id = db.Column(db.Integer, db.ForeignKey('department.id', ondelete='CASCADE'))

    # 领导所属的部门(多对一或一对一)
    leader_id = db.Column(db.Integer, db.ForeignKey('department.id', ondelete='CASCADE'))

    # 关系:员工对应的部门
    staffs_department = db.relationship('Department', back_populates='staffs', foreign_keys=[department_id])

    # 关系:领导对应的部门
    leader_department = db.relationship('Department', back_populates='leader', foreign_keys=[leader_id])




class Department(BaseModel, db.Model):
    __tablename__ = 'department'
    __table_args__ = {'comment': '部门表'}
    id = db.Column(db.Integer, primary_key=True, comment='部门id')
    name = db.Column(db.String(20), nullable=False, unique=True, comment='部门名称')
    intro = db.Column(db.Text, comment='部门介绍')
    staff_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    # 一对多关系,表示这个部门的员工
    staffs = db.relationship('User', back_populates='staffs_department', lazy='dynamic', cascade='all, delete',
                             passive_deletes=True, foreign_keys='User.department_id')

    # 一对一关系,表示这个部门的领导
    leader = db.relationship('User', back_populates='leader_department', uselist=False, foreign_keys='User.leader_id')
相关推荐
Geo_V10 分钟前
OpenAI 大模型 API 使用示例
python·chatgpt·openai·大模型应用·llm 开发
Hello_WOAIAI14 分钟前
2.4 python装饰器在 Web 框架和测试中的实战应用
开发语言·前端·python
百锦再24 分钟前
第1章 Rust语言概述
java·开发语言·人工智能·python·rust·go·1024程序员节
tokepson36 分钟前
chatgpt-to-md优化并重新复习
python·ai·技术·pypi·记录
Victory_orsh44 分钟前
“自然搞懂”深度学习(基于Pytorch架构)——010203
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
java1234_小锋44 分钟前
PyTorch2 Python深度学习 - 模型保存与加载
开发语言·python·深度学习·pytorch2
Python图像识别1 小时前
74_基于深度学习的垃圾桶垃圾溢出检测系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
python·深度学习·yolo
MrSYJ1 小时前
可以指定 Jupyter Notebook 使用的虚拟环境吗
python·llm·agent
quant_19861 小时前
【教程】使用加密货币行情接口 - 查询比特币实时价格
开发语言·后端·python·websocket·网络协议
ytttr8731 小时前
MATLAB实现经验模态分解(EMD)与希尔伯特变换获取能量谱
人工智能·python·matlab