Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

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


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