Transaktionen in Pandas können mit SQLAlchemys engine.begin ()
wie folgt implementiert werden:
Selbst wenn das Aktualisieren jeder Tabelle einige Zeit in Anspruch nimmt, kann das Update auf diese Weise ohne Zeitunterschied gleichzeitig wiedergegeben werden. Wenn dies fehlschlägt, können Sie ein Rollback durchführen.
Bei Verwendung von with
wird der Festschreibungsprozess automatisch aufgerufen. (Bei Fehler zurücksetzen)
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')
Wenn Sie eine Abfrage ausführen, die bewirkt, dass ein Commit innerhalb des with
-Blocks ausgeführt wird, wird es dort festgeschrieben.
Referenz: Anweisungen, die ein implizites Commit verursachen
Wenn beispielsweise die Option "if_exists" von "to_sql" auf "platz" gesetzt ist, wird DROP TABLE ausgeführt und für jede Tabelle wird eine Aktualisierung durchgeführt.
with engine.begin() as conn:
df1.to_sql('table1', conn, if_exists='replace')
df2.to_sql('table2', conn, if_exists='replace') #DROP TABLE wird aufgerufen und die Aktualisierung von Tabelle1 wird festgeschrieben.
Wenn Sie den gesamten Inhalt der Tabelle aktualisieren möchten, ist es besser, eine Tabelle mit einem anderen Namen einmal zu erstellen und durch RENAME TABLE zu ersetzen.
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