Die akzeptierte Antwort ist richtig, aber wenn Sie mehr als nur den Kommentar von EoghanM wünschen, hat das Folgende für mich beim KOPIEREN einer Tabelle in CSV funktioniert ...
from sqlalchemy import sessionmaker, create_engine
eng = create_engine("postgresql://user:[email protected]:5432/db")
ses = sessionmaker(bind=engine)
dbcopy_f = open('/tmp/some_table_copy.csv','wb')
copy_sql = 'COPY some_table TO STDOUT WITH CSV HEADER'
fake_conn = eng.raw_connection()
fake_cur = fake_conn.cursor()
fake_cur.copy_expert(copy_sql, dbcopy_f)
Der sessionmaker
ist nicht notwendig, aber wenn Sie die Gewohnheit haben, die Engine und die Sitzung gleichzeitig zu erstellen, verwenden Sie raw_connection
Sie müssen sie trennen (es sei denn, es gibt eine Möglichkeit, über das Sitzungsobjekt auf die Engine zuzugreifen, die ich nicht kenne). Die SQL-Zeichenfolge, die copy_expert
bereitgestellt wird ist auch nicht der einzige Weg, es gibt ein einfaches copy_to
Funktion, die Sie mit einer Teilmenge der Parameter verwenden können, die Sie an ein normales COPY
übergeben könnten Abfragen. Die Gesamtleistung des Befehls scheint mir schnell zu sein und kopiert eine Tabelle mit ~20000 Zeilen.
http://initd.org/psycopg/docs/cursor.html#cursor.copy_tohttp://docs.sqlalchemy.org/en/latest/core/connections.html#sqlalchemy.engine.Engine.raw_connection