Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Der schnellste Weg, um ein Objekt einzufügen, wenn es mit SQLAlchemy nicht vorhanden ist

Wenn ein solches Objekt aufgrund einer Kombination von Spalten eindeutig ist, müssen Sie diese als zusammengesetzten Primärschlüssel markieren. Fügen Sie primary_key=True hinzu Keyword-Parameter zu jeder dieser Spalten hinzufügen, wobei Ihre id gelöscht wird Spalte insgesamt:

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)

Auf diese Weise kann Ihre Datenbank diese Zeilen effizienter verarbeiten (es ist keine inkrementierende Spalte erforderlich), und SQLAlchemy erkennt jetzt automatisch, ob zwei Instanzen von Showing auftreten sind dasselbe.

Ich glaube Sie können dann einfach Ihren neuen Showing einbinden zurück in die Sitzung:

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