Flask4个常见模板

学习到自关联多对多模型时,没找到详细的资料,给自己备份一下。

一对多关系

class Role(db.Model):
     __tablename__ = 'roles'
    id= db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    users = db.relationship('User', backref='role', lazy='dynamic')

class User(db.Model):
    __tablename__ = 'users'  
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True, index=True)
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))

多对多关系

tb_student_course = db.Table('tb_student_course',
                             db.Column('student_id', db.Integer, db.ForeignKey('students.id')),
                             db.Column('course_id', db.Integer, db.ForeignKey('courses.id'))
                             )

class Student(db.Model):
    __tablename__ = "students"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)

    courses = db.relationship(
        'Course', 
        secondary=tb_student_course,
        backref=db.backref('students', lazy='dynamic'),
        lazy='dynamic'
    )

class Course(db.Model):
    __tablename__ = "courses"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)

自关联一对多

class Comment(db.Model):
    """评论"""
    __tablename__ = "comments"

    id = db.Column(db.Integer, primary_key=True)
    # 评论内容
    content = db.Column(db.Text, nullable=False)
    # 父评论id
    parent_id = db.Column(db.Integer, db.ForeignKey("comments.id"))
    parent = db.relationship(
        "Comment", 
        remote_side=[id],
        backref=db.backref('childs', lazy='dynamic')
    )

自关联多对多

tb_user_follows = db.Table(
    "tb_user_follows",
    db.Column('follower_id', db.Integer, db.ForeignKey('info_user.id'), primary_key=True),  # 用户Id
    db.Column('followed_id', db.Integer, db.ForeignKey('info_user.id'), primary_key=True)  # 用户关注对象id
)

class User(db.Model):
    """用户表"""
    __tablename__ = "info_user"

    id = db.Column(db.Integer, primary_key=True)  
    name = db.Column(db.String(32), unique=True, nullable=False)

    followers = db.relationship(
       'User',
       secondary=tb_user_follows,
       primaryjoin=id == tb_user_follows.c.follower_id,
       secondaryjoin=id == tb_user_follows.c.followed_id,
       backref=db.backref('followed', lazy='dynamic'),
       lazy='dynamic'
     )

你可能感兴趣的:(学习笔记)