Hvis et sådant objekt er unikt baseret på en kombination af kolonner, skal du markere disse som en sammensat primærnøgle. Tilføj primary_key=True søgeordsparameter til hver af disse kolonner, og du slipper dit id kolonne i alt:
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)
På den måde kan din database håndtere disse rækker mere effektivt (intet behov for en trinvis kolonne), og SQLAlchemy ved nu automatisk, om to forekomster af Showing er det samme.
Jeg tror du kan så bare flette din nye Showing tilbage i sessionen:
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)
)