insertions multi-tables à l'aide sqlalchemy

voix
1

J'ai un vol de table MySQL comme suit: -

pkid       from_city            to_city
 1         Melbourne            BuenosAires
 2         Budapest             Tokyo

Ensuite, je dois mon modèle sqlalchemy comme suit: -

class Flight(Base):

    __tablename__ = 'flight'

    pkid = Column('pkid', INTEGER(unsigned=True), primary_key=True)
    from_city = Column('from_city', VARCHAR(50), nullable=False)
    to_city = Column('to_city', VARCHAR(50), nullable=False)

Maintenant, dans mon code, j'ai des données de vol que je veux insérer dans la table de vol et récupérer les clés primaires pour mes dossiers avant même de commettre.

Ci-dessous mon scénario

étape 1: traiter les données brutes, les manipulations de données et obtenir la liste des dictionnaires prêts pour l'insertion dans la table vol exemple-

records = [{'from_city': 'Amsterdam', 'to_city': 'Toronto'},
           {'from_city': 'Mumbai', 'to_city': 'Colombo'}]

Étape 2: Insérez les données dans le tableau de vol en utilisant SQL Alchemy

étape 3: retourner la liste des pkids des enregistrements nouvellement insérés dans l' étape 2

étape 4: Insérer les données dans la table d'avion dans laquelle chaque PKID de l'étape 3 est une clé étrangère dans la table de transport aérien

Étape 5: engager toutes les transactions si l'étape 4 est réussie. étape rollback Else 2 transactions ainsi

De la documentation sqlalchemy, je crois que les insertions de base dans le style « executemany » est le moyen le plus rapide d'insérer des enregistrements par rapport au style ORM qui me donne envie d'utiliser l'option d'insertion de base sqlalchemy.

Mais en utilisant l'insertion de base, je vais perdre la capacité d'obtenir les clés primaires des enregistrements de vol à l'étape 3 avant de réellement commettre? ou est-il un moyen d'obtenir encore les clés primaires? Considérant que j'ai de grandes quantités de données à insérer, Si j'utilise le style ORM, je peux rincer et obtenir les clés primaires mais je dois faire des compromis sur la performance?

Je pourrais utiliserai , Dataframe.to_sqlmais il est livré avec auto-commit fonctionnalité que je ne veux pas

Actuellement, je fais de cette façon comme suit: -

Étape 1

stage2

trans = connection.begin()
connection.execute(table.insert(), records)

Je ne sais pas comment faire étape 3. Besoin d'aide

Destinée à faire étape 4

Destinée à faire Étape 5 - trans.commit()/ trans.rollback()basé sur l' étape 4

Toutes les suggestions ou conseils pour faire étape 3?

Créé 20/10/2018 à 03:34
source utilisateur
Dans d'autres langues...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more