2009-12-08 12 views
17

मेरे पास डेटा का एक ब्लॉक है, वर्तमान में एन-टुपल्स की सूची के रूप में, लेकिन प्रारूप बहुत लचीला है, कि मैं पोस्टग्रेज़ टेबल में जोड़ना चाहता हूं - इस मामले में, प्रत्येक एन-टुपल एक पंक्ति से मेल खाता है डीबी।सीधे पायथन में पोस्टग्रेस कॉपी कॉपी करना?

मैं इस बिंदु पर क्या कर रहा था, यह सब एक सीएसवी फ़ाइल में लिख रहा है और फिर पोस्टग्रेर्स को कॉपी करने के लिए डेटाबेस में सभी को थोक लोड करने के लिए उपयोग कर रहा है। यह काम करता है, लेकिन उपमहाद्वीप है, मैं इसे सीधे पाइथन से करने में सक्षम होना पसंद करूंगा। Postgres में COPY प्रकार थोक लोड को दोहराने के लिए पाइथन के भीतर से कोई विधि है?

उत्तर

45

आप psycopg2 ड्राइवर उपयोग कर रहे हैं, कर्सर एक copy_to और copy_from समारोह है कि किसी भी फाइल जैसी वस्तु (एक StringIO बफर सहित) से पढ़ सकते हैं प्रदान करते हैं।

examples/copy_from.py और examples/copy_to.py फ़ाइलों में उदाहरण हैं जो psycopg2 source distribution के साथ आते हैं।

यह अंश copy_from.py उदाहरण से है:

conn = psycopg2.connect(DSN) 
curs = conn.cursor() 
curs.execute("CREATE TABLE test_copy (fld1 text, fld2 text, fld3 int4)") 

# anything can be used as a file if it has .read() and .readline() methods 
data = StringIO.StringIO() 
data.write('\n'.join(['Tom\tJenkins\t37', 
        'Madonna\t\N\t45', 
        'Federico\tDi Gregorio\t\N'])) 
data.seek(0) 

curs.copy_from(data, 'test_copy') 
+2

मेरा सौभाग्य ... अगर यह आप के लिए काम करता है, इस उत्तर के लिए स्वीकार बटन हिट करने के लिए मत भूलना। मैंने देखा है कि आपने अपने अन्य प्रश्नों के किसी भी उत्तर को स्वीकार नहीं किया है, लेकिन "स्वीकृति" चेकमार्क उन लोगों की सहायता करता है जिनके पास एक ही समस्या है जो एक नज़र में है, जिसने आपके लिए समस्या हल की है। –

+0

क्षमा करें, मैंने पहले चेक अंक भी नहीं देखा था :) – geoffjentry

+0

कृपया इसे बूलियन और सरणी शामिल करने के लिए संशोधित करें क्योंकि ये मेरे लिए काम नहीं करते हैं! –

संबंधित मुद्दे