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

Hurtigste måde at indsætte objekt på, hvis det ikke findes med SQLAlchemy

Hvis et sådant objekt er unikt baseret på en kombination af kolonner, skal du markere disse som en sammensat primærnøgle. Tilføj primary_key=True søgeordsparameter til hver af disse kolonner, og du slipper dit id kolonne i alt:

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å den måde kan din database håndtere disse rækker mere effektivt (intet behov for en trinvis kolonne), og SQLAlchemy ved nu automatisk, om to forekomster af Showing er det samme.

Jeg tror du kan så bare flette din nye Showing tilbage i 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. Lagring af CPR-numre

  2. Dvale kortlægning mellem PostgreSQL enum og Java enum

  3. Kan ikke finde nulværdi fra JSON_EXTRACT

  4. ukendt database i jdbc