Mysql
 sql >> Database >  >> RDS >> Mysql

Il modo più veloce per inserire un oggetto se non esiste con SQLAlchemy

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