Flask sqlalchemy many-to-many insert data

后端 未结 3 1935
余生分开走
余生分开走 2020-11-28 02:48

I am trying to make a many to many relation here in Flask-SQLAlchemy, but it seems that I don\'t know how to fill the \"many to many identifier database

3条回答
  •  执念已碎
    2020-11-28 03:38

    You don't need to add anything directly to your association table, SQLAlchemy will do that. This is more or less from SQLAlchemy documentations:

    association_table = db.Table('association', db.Model.metadata,
        db.Column('left_id', db.Integer, db.ForeignKey('left.id')),
        db.Column('right_id', db.Integer, db.ForeignKey('right.id'))
    )
    
    class Parent(db.Model):
        __tablename__ = 'left'
        id = db.Column(db.Integer, primary_key=True)
        children = db.relationship("Child",
                        secondary=association_table)
    
    class Child(db.Model):
        __tablename__ = 'right'
        id = db.Column(db.Integer, primary_key=True)
    
    
    p = Parent()
    c = Child()
    p.children.append(c)
    db.session.add(p)
    db.session.commit()
    

    Therefore your sample would be like this:

    student_identifier = db.Table('student_identifier',
        db.Column('class_id', db.Integer, db.ForeignKey('classes.class_id')),
        db.Column('user_id', db.Integer, db.ForeignKey('students.user_id'))
    )
    
    class Student(db.Model):
        __tablename__ = 'students'
        user_id = db.Column(db.Integer, primary_key=True)
        user_fistName = db.Column(db.String(64))
        user_lastName = db.Column(db.String(64))
        user_email = db.Column(db.String(128), unique=True)
    
    
    class Class(db.Model):
        __tablename__ = 'classes'
        class_id = db.Column(db.Integer, primary_key=True)
        class_name = db.Column(db.String(128), unique=True)
        students = db.relationship("Student",
                                   secondary=student_identifier)
    
    s = Student()
    c = Class()
    c.students.append(s)
    db.session.add(c)
    db.session.commit()
    

提交回复
热议问题