přijatá odpověď je správná, ale pokud chcete víc než jen komentář od EoghanM, následující postup mi fungoval při KOPÍROVÁNÍ tabulky do 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
není nutné, ale pokud máte ve zvyku vytvářet engine a relaci současně, použijte raw_connection
budete je muset oddělit (pokud neexistuje nějaký způsob, jak získat přístup k enginu přes objekt relace, který neznám). Řetězec sql poskytnutý copy_expert
není také jediná cesta k němu, existuje základní copy_to
funkce, kterou můžete použít s podmnožinou parametrů, které byste mohli vložit do normálního COPY
TO dotaz. Celkový výkon příkazu se mi zdá rychlý, protože zkopíruje tabulku ~20 000 řádků.
http://initd.org/psycopg/docs/cursor.html#cursor.copy_tohttp://docs.sqlalchemy.org/en/latest/core/connections.html#sqlalchemy.engine.Engine.raw_connection