PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Copie SQLAlchemy, Psycopg2 et Postgresql

la réponse acceptée est correcte, mais si vous voulez plus que le commentaire d'EoghanM, ce qui suit a fonctionné pour moi en COPIANT un tableau au format 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)

Le sessionmaker n'est pas nécessaire mais si vous avez l'habitude de créer le moteur et la session en même temps d'utiliser raw_connection vous aurez besoin de les séparer (sauf s'il existe un moyen d'accéder au moteur via l'objet de session que je ne connais pas). La chaîne sql fournie à copy_expert n'est pas non plus le seul moyen d'y parvenir, il existe un élément de base copy_to fonction que vous pouvez utiliser avec un sous-ensemble de paramètres que vous pourriez coller à un COPY normal POUR interroger. Les performances globales de la commande me semblent rapides, copiant un tableau d'environ 20 000 lignes.

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