sql >> Databasteknik >  >> RDS >> Mysql

Snabbaste sättet att infoga objekt om det inte finns med SQLAlchemy

Om något sådant objekt är unikt baserat på en kombination av kolumner, måste du markera dessa som en sammansatt primärnyckel. Lägg till primary_key=True sökordsparameter till var och en av dessa kolumner och släpper ditt id kolumn helt och hållet:

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)

På så sätt kan din databas hantera dessa rader mer effektivt (inget behov av en inkrementerande kolumn), och SQLAlchemy vet nu automatiskt om två instanser av Showing är samma sak.

Jag tror du kan sedan bara slå ihop din nya Showing tillbaka till sessionen:

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



  1. GREATEST() Funktion i Oracle

  2. SQL Data Definition Language

  3. MySQL Radera med Group By

  4. LOG() Exempel i SQL Server