PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

SQLAlchemy, Psycopg2 e Postgresql COPY


a resposta aceita está correta, mas se você quiser mais do que apenas o comentário do EoghanM, o seguinte funcionou para mim em COPIAR uma tabela para 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)

O sessionmaker não é necessário, mas se você tem o hábito de criar o mecanismo e a sessão ao mesmo tempo, use raw_connection você precisará separá-los (a menos que haja alguma maneira de acessar o mecanismo através do objeto de sessão que eu não conheça). A string sql fornecida para copy_expert também não é o único caminho para isso, existe um copy_to básico função que você pode usar com subconjunto dos parâmetros que você pode colar em um COPY normal Para consulta. O desempenho geral do comando parece rápido para mim, copiando uma tabela de ~ 20.000 linhas.

http://initd.org/psycopg/docs/cursor.html#cursor.copy_tohttp://docs.sqlalchemy.org/en/latest/core/connections.html#sqlalchemy.engine.Engine.raw_connection