Para definir relaciones en SQLAlchemy, puedes seguir estos patrones dentro de tus modelos:
-
Relación 1:1 (One-to-One):
En este tipo de relación, un objeto de una clase está asociado con exactamente un objeto de otra clase y viceversa.
class Parent(db.Model): __tablename__ = 'parent' id = db.Column(db.Integer, primary_key=True) child = db.relationship('Child', uselist=False, back_populates='parent') class Child(db.Model): __tablename__ = 'child' id = db.Column(db.Integer, primary_key=True) parent_id = db.Column(db.Integer, db.ForeignKey('parent.id')) parent = db.relationship('Parent', back_populates='child')
-
Relación 1:N (One-to-Many):
En este tipo de relación, un objeto de una clase está asociado con cero o más objetos de otra clase, pero un objeto de la segunda clase solo está asociado con un objeto de la primera clase.
class Parent(db.Model): __tablename__ = 'parent' id = db.Column(db.Integer, primary_key=True) children = db.relationship('Child', back_populates='parent') class Child(db.Model): __tablename__ = 'child' id = db.Column(db.Integer, primary_key=True) parent_id = db.Column(db.Integer, db.ForeignKey('parent.id')) parent = db.relationship('Parent', back_populates='children')
-
Relación N:M (Many-to-Many):
En este tipo de relación, muchos objetos de una clase están asociados con muchos objetos de otra clase.
books_rents = db.Table( 'books_rents', db.Column('book_id', db.Integer, db.ForeignKey('book.id')), db.Column('rent_id', db.Integer, db.ForeignKey('rent.id')) ) class Book(db.Model): __tablename__ = 'book' id = db.Column(db.Integer, primary_key=True) rents = db.relationship('Rent', secondary=books_rents, back_populates='books') class Rent(db.Model): __tablename__ = 'rent' id = db.Column(db.Integer, primary_key=True) books = db.relationship('Book', secondary=books_rents, back_populates='rents')
Estos son solo ejemplos básicos para mostrar cómo definir relaciones en SQLAlchemy. Puedes personalizarlos según tus necesidades específicas, como añadir más columnas a la tabla de relación en el caso de las relaciones muchos a muchos, o especificar restricciones de clave externa adicionales según tus necesidades de negocio.