स्वीकृत उत्तर सही है, लेकिन यदि आप चाहते हैं कि निम्नलिखित पर जाने के लिए केवल 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