2009-12-08 6 views
17

나는 데이터 블럭을 가지고 있는데, 현재는 n-tuples의리스트이지만 형식은 꽤 유연하다. Postgres 테이블에 추가하고 싶다.이 경우 각 n-tuple은 DB.Postgres 다시 만들기 Python으로 직접 복사 하시겠습니까?

이 모든 것을 CSV 파일에 작성한 다음 postgres의 COPY를 사용하여이 모든 것을 데이터베이스에 대량로드합니다. 이 작품은, 그러나 차선책입니다, 나는 파이썬에서 직접이 모든 것을 할 수 있기를 원합니다. Postgres에서 COPY 유형의 대량로드를 복제하기위한 python 내부의 메소드가 있습니까?

답변

45

psycopg2 드라이버를 사용하는 경우 커서는 copy_tocopy_from 기능을 파일과 유사한 객체 (버퍼 StringIO 포함)에서 읽을 수 있습니다.

examples/copy_from.pyexamples/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

부울 및 배열을 포함하도록 수정하여 제게 적합하지 않은 것으로 보입니다. –

관련 문제