sql >> データベース >  >> RDS >> PostgreSQL

SQLAlchemy、Psycopg2、Postgresql COPY

    受け入れられた答えは正しいですが、EoghanMのコメント以上のものが必要な場合は、テーブルを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 必須ではありませんが、エンジンとセッションを同時に作成してraw_connectionを使用する習慣がある場合 それらを分離する必要があります(私が知らないセッションオブジェクトを介してエンジンにアクセスする方法がない限り)。 copy_expertに提供されるSQL文字列 それへの唯一の方法でもありません、基本的なcopy_toがあります 通常のCOPYに貼り付けることができるパラメータのサブセットで使用できる関数 クエリする。コマンドの全体的なパフォーマンスは私には速いようで、最大20000行のテーブルをコピーします。

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



    1. 数十億行に最適なデータストア

    2. MySQLデータベースのデータを更新する

    3. Oracleテーブル変数/配列から値を選択しますか?

    4. MySQLで日付で注文する方法