het geaccepteerde antwoord is correct, maar als je meer wilt dan alleen de opmerking van de EoghanM, werkte het volgende voor mij bij het kopiëren van een tabel naar 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)
De sessionmaker
is niet nodig, maar als je de gewoonte hebt om de engine en de sessie tegelijkertijd te maken, gebruik dan raw_connection
je moet ze scheiden (tenzij er een manier is om toegang te krijgen tot de engine via het sessie-object dat ik niet ken). De sql-tekenreeks die is verstrekt aan copy_expert
is ook niet de enige manier om er te komen, er is een basis copy_to
functie die u kunt gebruiken met een subset van de parameters die u zou kunnen doorgeven aan een normale COPY
NAAR opvragen. De algehele prestaties van de opdracht lijken me snel, door een tabel van ~20000 rijen te kopiëren.
http://initd.org/psycopg/docs/cursor.html#cursor.copy_tohttp://docs.sqlalchemy.org/en/latest/core/connections.html#sqlalchemy.engine.Engine.raw_connection