sql >> Base de Datos >  >> RDS >> Mysql

La forma más rápida de insertar un objeto si no existe con SQLAlchemy

Si alguno de estos objetos es único en función de una combinación de columnas, debe marcarlos como una clave principal compuesta. Agregue el primary_key=True parámetro de palabra clave a cada una de estas columnas, soltando su id columna en total:

class Showing(Base):
    __tablename__   = "showings"

    time            = Column(DateTime, primary_key=True)
    link            = Column(String)
    film_id         = Column(Integer, ForeignKey('films.id'), primary_key=True)
    cinema_id       = Column(Integer, ForeignKey('cinemas.id'), primary_key=True)

De esa manera, su base de datos puede manejar estas filas de manera más eficiente (sin necesidad de una columna incremental), y SQLAlchemy ahora sabe automáticamente si dos instancias de Showing son lo mismo.

Yo creo luego puede simplemente fusionar su nuevo Showing volver a la sesión:

def AddShowings(self, showing_times, cinema, film):
    for showing_time in showing_times:
        self.session.merge(
            Showing(time=showing_time[0], link=showing_time[1],
                    film=film, cinema=cinema)
        )