2017-12-11 1 views
0

나는 CSV 파일을 처리하고 PSQL 인스턴스 (AZURE에서 호스팅 됨)에 삽입 할 수 있도록 App Engine 플라스크 응용 프로그램에서 pg8000을 사용하고 있습니다.CSV에서 pg8000 복사본

pg8000이 아닌 이유는 무엇입니까? psycopg2? -> 앱 엔진은 psycopg2를 지원하지 않기 때문에

지금까지 pg8000의 문서에는 psycopg2와 같은 기능을 수행한다고 나와 있지 않습니다. 나는 SO를 비롯한 다른 장소에서 문서를 포함한 예제를 발견하지 못했습니다.

가능한지 누구나 알고 계십니까? 당신은 옵션이 할

에 가능하게, the source code 보면

답변

1

직접 CSV를를 가져올 수있는 방법이 될 것 같지 않으며, 코드는 내장 래퍼 주위 INSERT 질문이 나타나지 않습니다 의 수동 CSV 리더를 사용하고 executemany 사용 :

import csv 
import pg8000 

conn = pg8000.connect(user="postgres", password="C.P.Snow") 
cursor = conn.cursor() 

command = 'INSERT INTO book (title) VALUES (%s), (%s) RETURNING id, title' 
with open('my-data.csv', 'rb') as fl: 
    data = list(csv.reader(fl)) 
    conn.executemany(command, data) 

을주의의 단어로, 데이터의 크기에 따라, 사용하는 것이 더있을 수 있습니다 islice :

,224,995,321 0
+0

이 잘 작동하지만 다음과 같은 오류가 발생합니다 :'ProgrammingError : (u'ERROR ', u'ERROR', u'42601는 'u'INSERT는 표현보다 더 많은 대상 열이'u'79을 ' , u'analyze.c ', u'884', u'transformInsertRow ')', 이걸 도와 줄 수 있니? 열 중 하나가 autoincrement이고 insert 문에 지정되지 않았습니다. – codeninja

+0

이것은 SQL 오류입니다. 먼저 SQL을 작동시켜야하고'executemany'에 연결해야합니다. – cwallenpoole

+0

고정! 그러나 처리하는 데는 많은 시간이 걸립니다. 삽입하는 대신 복사 명령을 사용할 수 없습니까? – codeninja

0

다른 질문 here에서 제안 된대로, csv 파일에 논리를 적용하기 전에와 csv 읽기 방법을 사용하기 전에 next 방법을 사용할 수 있습니다.

죄송합니다. 이전 답변을 보완하기 위해 미리 삽입하지 않으셔서 죄송 합니다만, 그렇게 할만한 충분한 점수가 없습니다.

동일한 문제가 있으며 아래에서이 문제를 해결했습니다. 나에게 많은 것을 실행하는 정확한 방법은 conn이 아니라 cursor 개체에 있다는 것을 알아 두십시오.

conn = pg8000.connect(user='username', password='password', host='host', port=5432, database='database name') 
cursor = conn.cursor() 

command = "INSERT INTO public.salesforce_accounts (field1, field2, field3, field4, field5, field6) VALUES (%s, %s, %s, %s, %s, %s)" 
with open('test.csv', 'r') as file: 
    next(file) 
    data = list(csv.reader(file)) 
    cursor.executemany(command, data)