flask sqlalchemy数据库关系表结构

这段内容描述了数据库中评论、用户、案例组和案例之间的关系模型。`Comment`类包含了评论内容及其层级关系,`User`类展示了用户关注关系,`CaseGroup`类定义了案例组的子组和案例的关联,而`Case`类则关联了具体的测试步骤。这些模型为数据存储和查询提供了结构化的框架。
摘要由CSDN通过智能技术生成
class Comment(db.Model):
    """评论"""
    id = db.Column(db.Integer, primary_key=True)  # 评论编号
    content = db.Column(db.Text, nullable=False)  # 评论内容
    parent_id = db.Column(db.Integer, db.ForeignKey("comment.id"))  # 父评论id
    parent = db.relationship("Comment", remote_side=[id])  # 自关联


followers = db.Table('followers',
                     db.Column('follower_id', db.Integer, db.ForeignKey('user.id')),
                     db.Column('followed_id', db.Integer, db.ForeignKey('user.id'))
                     )


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), nullable=False)
    followed = db.relationship(
        # User 表示关系当中的右侧实体(将左侧实体看成是上级类)
        # 由于这是自引用关系,所以两侧都是同一个实体。
        'User',

        # secondary 指定了用于该关系的关联表
        # 就是使用我在上面定义的 followers
        secondary=followers,

        # primaryjoin 指明了右侧对象关联到左侧实体(关注者)的条件
        # 也就是根据左侧实体查找出对应的右侧对象
        # 执行 user.followed 时候就是这样的查找
        primaryjoin=(followers.c.follower_id == id),
        # secondaryjoin 指明了左侧对象关联到右侧实体(被关注者)的条件
        # 也就是根据右侧实体找出左侧对象
        # 执行 user.followers 时候就是这样的查找
        secondaryjoin=(followers.c.followed_id == id),

        # backref 定义了右侧实体如何访问该关系
        # 也就是根据右侧实体查找对应的左侧对象
        # 在左侧,关系被命名为 followed
        # 在右侧使用 followers 来表示所有左侧用户的列表,即粉丝列表
        backref=db.backref('followers', lazy='dynamic'),
        lazy='dynamic'
    )


sub_group = db.Table('sub_group',
                     db.Column('parent_id', db.Integer, db.ForeignKey('case_group.id')),
                     db.Column('child_id', db.Integer, db.ForeignKey('case_group.id'))
                     )


class CaseGroup(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    group_name = db.Column(db.String(30))
    sub = db.relationship(
        'CaseGroup',
        secondary=sub_group,
        primaryjoin=(sub_group.c.parent_id == id),
        secondaryjoin=(sub_group.c.child_id == id),
        backref=db.backref('parent', lazy=True),
        lazy=True
    )
    case = db.relationship('Case', backref='case_group', lazy=True)


class Case(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    case_name = db.Column(db.String(30))
    group_id = db.Column(db.Integer, db.ForeignKey('case_group.id'))


class CaseStep(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    step_name = db.Column(db.String(60))
    case_id = db.Column(db.Integer, db.ForeignKey('case.id'))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值