Mysql
 sql >> Base de données >  >> RDS >> Mysql

Le moyen le plus rapide d'insérer un objet s'il n'existe pas avec SQLAlchemy

Si un tel objet est unique en fonction d'une combinaison de colonnes, vous devez les marquer en tant que clé primaire composite. Ajoutez le primary_key=True paramètre de mot-clé à chacune de ces colonnes, en supprimant votre id colonne au total :

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)

De cette façon, votre base de données peut gérer ces lignes plus efficacement (pas besoin d'une colonne d'incrémentation), et SQLAlchemy sait désormais automatiquement si deux instances de Showing sont la même chose.

Je crois vous pouvez ensuite simplement fusionner votre nouveau Showing revenir à la session :

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