sql >> Base de Datos >  >> RDS >> PostgreSQL

SQLAlchemy, Psycopg2 y Postgresql COPIA

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