Maneira mais rápida de inserir objeto se ele não existir com o SQLAlchemy

Então sou muito novo no SQLAlchemy.

Eu tenho um modelo mostrando que tem cerca de 10.000 linhas na tabela. Aqui está a aula:

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

Alguém poderia me dar alguma orientação sobre a maneira mais rápida de inserir uma nova exibição, se ela ainda não existe. Eu acho que é um pouco mais complicado porque uma exibição é única se o tempo, a cinmea e o filme são únicos em uma exibição.

Atualmente tenho 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)

que funciona, mas parece ser muito lento. Qualquer ajuda é muito apreciada.