Se uno di questi oggetti è univoco in base a una combinazione di colonne, è necessario contrassegnarli come chiave primaria composita. Aggiungi il primary_key=True
parametro parola chiave in ciascuna di queste colonne, eliminando il tuo id
colonna del tutto:
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)
In questo modo il tuo database può gestire queste righe in modo più efficiente (non c'è bisogno di una colonna incrementale) e SQLAlchemy ora sa automaticamente se due istanze di Showing
sono la stessa cosa.
credo puoi quindi unire il tuo nuovo Showing
di nuovo nella sessione:
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)
)