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')
相关推荐
SunnyDays101115 小时前
Python 轻松实现替换或修改 PDF 文字
python·替换pdf文字·修改pdf·修改pdf文字
Just_Paranoid16 小时前
【Settings】恢复出厂设置密码校验
android·python·settings·sha256·hmac-sha256
西猫雷婶17 小时前
pytorch基本运算-Python控制流梯度运算
人工智能·pytorch·python·深度学习·神经网络·机器学习
子午18 小时前
Python的uv包管理工具使用
开发语言·python·uv
java1234_小锋18 小时前
Scikit-learn Python机器学习 - 分类算法 - 朴素贝叶斯
python·机器学习·scikit-learn
凡梦千华18 小时前
Django时区感知
后端·python·django
程序猿 小项目大搞头19 小时前
即梦批量生成图片软件使用运营大管家-即梦图片批量生成器
python
dpxiaolong19 小时前
RK3588 Android12默认移除导航栏
开发语言·python
max50060019 小时前
基于多元线性回归、随机森林与神经网络的农作物元素含量预测及SHAP贡献量分析
人工智能·python·深度学习·神经网络·随机森林·线性回归·transformer
Pocker_Spades_A19 小时前
Python快速入门专业版(二十九):函数返回值:多返回值、None与函数嵌套调用
服务器·开发语言·python