La respuesta aceptada es correcta, pero si desea algo más que el comentario de EoghanM, lo siguiente funcionó para mí al COPIAR una tabla en 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)
El sessionmaker
no es necesario, pero si tiene la costumbre de crear el motor y la sesión al mismo tiempo, use raw_connection
necesitará separarlos (a menos que haya alguna forma de acceder al motor a través del objeto de sesión que no conozco). La cadena sql proporcionada a copy_expert
tampoco es la única forma de hacerlo, hay un copy_to
básico función que puede usar con un subconjunto de los parámetros que podría pasar a un COPY
normal Para consultar. El rendimiento general del comando me parece rápido, copiando una tabla de ~20000 filas.
http://initd.org/psycopg/docs/cursor.html#cursor.copy_tohttp://docs.sqlalchemy.org/en/latest/core/connections.html#sqlalchemy.engine.Engine.raw_connection