PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

SQLAlchemy, Psycopg2 und Postgresql COPY

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