Se algum desses objetos for exclusivo com base em uma combinação de colunas, você precisará marcá-los como uma chave primária composta. Adicione o
primary_key=True
parâmetro de palavra-chave para cada uma dessas colunas, descartando seu id
coluna completamente: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)
Dessa forma, seu banco de dados pode lidar com essas linhas com mais eficiência (sem necessidade de uma coluna de incremento), e o SQLAlchemy agora sabe automaticamente se duas instâncias de
Showing
são a mesma coisa. Eu acredito você pode então apenas mesclar seu novo
Showing
de volta à sessão: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)
)