Ich versuche, eine Tabelle zu schneiden und nur ~ 3000 Zeilen von Daten mit SQLAlchemy einfügen, und es ist sehr langsam (~ 10 Minuten).SQLAlchemy Core-Masseneinfügung langsam
Ich folgte den Empfehlungen zu diesem doc und gehebelten sqlalchemy Kern, um meine Einsätze zu tun, aber es läuft immer noch sehr sehr langsam. Was sind mögliche Täter für mich zu sehen? Die Datenbank ist eine postgres RDS-Instanz. Vielen Dank!
engine = sa.create_engine(db_string, **kwargs, pool_recycle=3600)
with engine.begin() as conn:
conn.execute("TRUNCATE my_table")
conn.execute(
MyTable.__table__.insert(),
data #where data is a list of dicts
)
Haben Sie einen Primärschlüssel? ist das eine Menge von Tabellen mit Querverweisen? 10 Minuten zum Einfügen von 3k Zeilen scheint sehr exzessiv ... wie groß ist eine Zeile? Sie Datenbank läuft remote (dh nicht localhost ...) (das würde definitiv die Dinge verlangsamen ... wie viel, wahrscheinlich hängt von der Netzwerklatenz) ? –
Ja, ich habe einen Primärschlüssel, den ich über sa/alambic als natürlichen Schlüssel der Größe 100 gesetzt habe. Allerdings habe ich auch versucht, ihn mit einem Ersatz-Integer-Schlüssel auszuschalten und hatte ähnliche Leistungsprobleme. Meine Zeile besteht aus 6 Spalten mit Strings. Die DB ist remote (in AWS), also kann das Netzwerk damit etwas zu tun haben. – ResrieC
Dies benutzt das 'executemany'-Feature, das für psycopg2 ein verklärtes' execute' in einer 'for'-Schleife ist. Siehe [diese Frage] (http://stackoverflow.com/questions/8134602/psycopg2-insert-multiple-rows-with-one-query). – univerio