PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

SQLAlchemy, Psycopg2 e Postgresql COPY

la risposta accettata è corretta ma se vuoi che qualcosa di più del semplice commento di EoghanM vada avanti, per me ha funzionato COPIA di una tabella su 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)

Il sessionmaker non è necessario ma se hai l'abitudine di creare contemporaneamente il motore e la sessione per utilizzare raw_connection avrai bisogno di separarli (a meno che non ci sia un modo per accedere al motore tramite l'oggetto sessione che non conosco). La stringa sql fornita a copy_expert inoltre non è l'unico modo per farlo, c'è un copy_to di base funzione che puoi usare con un sottoinsieme dei parametri che potresti incollare in un normale COPY A interrogare. Le prestazioni complessive del comando sembrano veloci per me, copiando una tabella di ~ 20000 righe.

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