Si un tel objet est unique en fonction d'une combinaison de colonnes, vous devez les marquer en tant que clé primaire composite. Ajoutez le primary_key=True
paramètre de mot-clé à chacune de ces colonnes, en supprimant votre id
colonne au 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 cette façon, votre base de données peut gérer ces lignes plus efficacement (pas besoin d'une colonne d'incrémentation), et SQLAlchemy sait désormais automatiquement si deux instances de Showing
sont la même chose.
Je crois vous pouvez ensuite simplement fusionner votre nouveau Showing
revenir à la session :
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)
)