Saltar al contenido

Flask sqlalchemy datos de inserción de muchos a muchos

Sé libre de compartir nuestro espacio y códigos en tus redes, necesitamos tu ayuda para ampliar esta comunidad.

Solución:

No necesita agregar nada directamente a su tabla de asociación, SQLAlchemy lo hará. Esto es más o menos de las documentaciones de SQLAlchemy:

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()

Por lo tanto, su muestra sería así:

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()

Antes que nada, student_identifier se define como una tabla de reflexión de SQLAlchemy, no como una base de datos.

Normalmente, si tiene todas las relaciones configuradas correctamente entre los modelos y los objetos de la tabla de reflexión, solo necesitará tratar con modelos relacionados (agregando objetos de modelo a la relación InstrumentList) para insertar datos en las tablas de reflexión, por ejemplo, la respuesta @ mehdi-sadeghi proporcionado anteriormente.

Sin embargo, existe una forma de insertar directamente en las tablas de reflexión si no desea configurar la relación. Por ejemplo:

statement = student_identifier.insert().values(class_id=cl1.id, user_id=sti1.id)
db.session.execute(statement)
db.session.commit()

Después de eso, debería poder ver que se inserta una fila de relación de muchos a muchos en el student_identifier mesa de reflexión No olvide confirmar después de ejecutar cada instrucción SQL como se hace en una transacción.

Espero que te ayude con un enfoque alternativo.

Puntuaciones y comentarios

Agradecemos que quieras asentar nuestra labor añadiendo un comentario y valorándolo te estamos eternamente agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *