accepterat svar är korrekt men om du vill att mer än bara EoghanM:s kommentar ska gå vidare så fungerade följande för mig när jag kopierade en tabell till CSV...
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)
sessionmaker
är inte nödvändigt men om du har för vana att skapa motorn och sessionen samtidigt för att använda raw_connection
du behöver separera dem (såvida det inte finns något sätt att komma åt motorn via sessionsobjektet som jag inte känner till). SQL-strängen som tillhandahålls till copy_expert
är inte heller det enda sättet till det, det finns en grundläggande copy_to
funktion som du kan använda med en delmängd av parametrarna som du kan klistra in till en normal COPY
ATT fråga. Övergripande prestanda för kommandot verkar snabb för mig, kopiering ut en tabell med ~20000 rader.
http://initd.org/psycopg/docs/cursor.html#cursor.copy_tohttp://docs.sqlalchemy.org/en/latest/core/connections.html#sqlalchemy.engine.Engine.raw_connection