Les transactions dans les pandas peuvent être implémentées en utilisant ʻengine.begin () `de SQLAlchemy comme suit:
En faisant cela, même si la mise à jour de chaque table prend du temps, la mise à jour peut être reflétée en même temps sans décalage horaire, et si elle échoue, vous pouvez revenir en arrière.
En utilisant with
, le processus de validation est automatiquement appelé. (Revenir en cas d'échec)
from sqlalchemy import create_engine
engine = create_engine(url)
with engine.begin() as conn:
df1.to_sql('table1', conn, if_exists='append')
df2.to_sql('table2', conn, if_exists='append')
Si vous exécutez une requête qui entraîne l'exécution d'une validation dans le bloc with
, elle y sera validée.
Référence: Déclarations qui provoquent une validation implicite
Par exemple, si l'option ʻif_exists de
to_sql` est définie sur 'replace', DROP TABLE sera exécuté et une mise à jour se produira pour chaque table.
with engine.begin() as conn:
df1.to_sql('table1', conn, if_exists='replace')
df2.to_sql('table2', conn, if_exists='replace') #DROP TABLE est appelé et la mise à jour de table1 est validée.
Si vous souhaitez mettre à jour tout le contenu de la table, il semble préférable de créer une fois une table avec un autre nom et de la remplacer par RENAME TABLE.
from sqlalchemy import create_engine
engine = create_engine(url)
df1.to_sql('table1_new', engine, if_exists='replace')
df2.to_sql('table2_new', engine, if_exists='replace')
engine.execute('''
RENAME TABLE table1 to table1_old,
table1_new to table1
table2 to table2_old,
table2_tmp to table2;
'''
)
Recommended Posts