câu trả lời được chấp nhận là đúng nhưng nếu bạn không chỉ muốn nhận xét của EoghanM, hãy tiếp tục, điều sau đây phù hợp với tôi trong việc SAO CHÉP một bảng sang 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
không cần thiết nhưng nếu bạn có thói quen tạo công cụ và phiên cùng lúc để sử dụng raw_connection
bạn sẽ cần tách chúng ra (trừ khi có một số cách để truy cập công cụ thông qua đối tượng phiên mà tôi không biết). Chuỗi sql được cung cấp cho copy_expert
cũng không phải là cách duy nhất để đạt được điều đó, có một copy_to
cơ bản hàm mà bạn có thể sử dụng với tập hợp con các tham số mà bạn có thể dán vào một COPY
bình thường Để truy vấn. Hiệu suất tổng thể của lệnh có vẻ nhanh đối với tôi, sao chép ra một bảng gồm ~ 20000 hàng.
http://initd.org/psycopg/docs/cursor.html#cursor.copy_tohttp://docs.sqlalchemy.org/en/latest/core/connections.html#sqlalchemy.engine.Engine.raw_connection