python - tutorial - sqlalchemy delete object
Frasco sqlalchemy many-to-many insertar datos (2)
En primer lugar, student_identifier
se define como una tabla de reflexión SQLAlchemy, no una base de datos.
Normalmente, si tiene toda la relación configurada correctamente entre los modelos y los objetos de la tabla de reflexión, solo deberá tratar los modelos relacionados (al agregar objetos del modelo en la relación InstrumentList) para insertar datos en tablas de reflexión, por ejemplo, la respuesta @ mehdi-sadeghi provisto arriba.
Sin embargo, de hecho hay una forma de insertar directamente en 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 una fila de relación de muchos a muchos se inserta en la tabla de reflexión de student_identifier
. No olvide comprometerse después de ejecutar cada instrucción SQL como se hace en una transacción.
Espero que te ayude con un enfoque alternativo.
Estoy tratando de hacer una relación de muchos a muchos aquí en Flask-SQLAlchemy , pero parece que no sé cómo llenar la "base de datos de identificador de muchos a muchos" . ¿Podría por favor ayudarme a entender lo que estoy haciendo mal y cómo se supone que debe verse?
class User(db.Model):
__tablename__ = ''users''
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)
y luego mi base de datos de identificadores:
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(''users.user_id''))
)
hasta ahora se ve así cuando trato de insertar los datos en la base de datos.
# User
user1 = User(
user_fistName=''John'',
user_lastName=''Doe'',
user_email=''[email protected]'')
user2 = User(
user_fistName=''Jack'',
user_lastName=''Doe'',
user_email=''[email protected]'')
user3 = User(
user_fistName=''Jane'',
user_lastName=''Doe'',
user_email=''[email protected]'')
db.session.add_all([user1, user2, user3])
db.session.commit()
# Class
cl1 = Class(class_name=''0A'')
cl2 = Class(class_name=''0B'')
cl3 = Class(class_name=''0C'')
cl4 = Class(class_name=''Math'')
cl5 = Class(class_name=''Spanish'')
db.session.add_all([cl1, cl2, cl3, cl4, cl5])
db.session.commit()
Ahora mi problema es, ¿cómo puedo agregar a la base de datos de muchos a muchos, ya que realmente no puedo crear un objeto ''student_identifier''? Si pudiera, tal vez podría haber tenido este aspecto:
# Student Identifier
sti1 = StiClass(class_id=cl1.class_id, class_name=user1.user_id)
sti2 = StiClass(class_id=cl3.class_id, class_name=user1.user_id)
sti3 = StiClass(class_id=cl4.class_id, class_name=user1.user_id)
sti4 = StiClass(class_id=cl2.class_id, class_name=user2.user_id)
db.session.add_all([sti1, sti2, sti3, sti4])
db.session.commit()
¿Cómo se supone que debo insertar en una tabla de muchos a muchos con ORM?
No necesita agregar nada directamente a su tabla de asociación, SQLAlchemy hará eso. Esto es más o menos de la documentación 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)
children = db.relationship("Student",
secondary=student_identifier)
s = Student()
c = Class()
c.children.append(s)
db.session.add(c)
db.session.commit()