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

Así que soy bastante nuevo en SQLAlchemy.

Tengo un modelo que muestra que tiene alrededor de 10.000 filas en la tabla. Aquí está la clase:

class Showing(Base):
    __tablename__   = "showings"

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

    def __eq__(self, other):
        if self.time == other.time and self.cinema == other.cinema and self.film == other.film:
            return True
        else:
            return False

¿Podría alguien darme alguna orientación sobre la forma más rápida de insertar una nueva muestra si aún no existe? Creo que es un poco más complicado porque una proyección es única solo si el tiempo, la película y la película son únicos en una muestra.

Actualmente tengo este código:

def AddShowings(self, showing_times, cinema, film):
    all_showings = self.session.query(Showing).options(joinedload(Showing.cinema), joinedload(Showing.film)).all()
    for showing_time in showing_times:
        tmp_showing = Showing(time=showing_time[0], film=film, cinema=cinema, link=showing_time[1])
        if tmp_showing not in all_showings:
            self.session.add(tmp_showing)
            self.session.commit()
            all_showings.append(tmp_showing)

Lo cual funciona, pero parece ser muy lento. Cualquier ayuda es muy apreciada.

Respuestas a la pregunta(1)

Su respuesta a la pregunta