zaakceptowana odpowiedź jest poprawna, ale jeśli chcesz, aby coś więcej niż tylko komentarz EoghanM poszedł na poniższe, zadziałało dla mnie podczas KOPIOWANIA tabeli 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
nie jest konieczne, ale jeśli masz zwyczaj tworzenia silnika i sesji w tym samym czasie, użyj raw_connection
będziesz potrzebować ich rozdzielenia (chyba że istnieje jakiś sposób na dostęp do silnika poprzez obiekt sesji, którego nie znam). Ciąg sql dostarczony do copy_expert
to również nie jedyna droga do tego, istnieje podstawowe copy_to
funkcja, której możesz użyć z podzbiorem parametrów, które możesz wkleić do normalnego COPY
Zapytać. Ogólna wydajność polecenia wydaje mi się szybka, kopiując tabelę ~20000 wierszy.
http://initd.org/psycopg/docs/cursor.html#cursor.copy_tohttp://docs.sqlalchemy.org/en/latest/core/connections.html#sqlalchemy.engine.Engine.raw_connection