2014-04-28 4 views
-2

저는 python 3과 psycopg2를 사용하여 postgresql 테이블에 연결합니다.postgresql 테이블을 반복하고 파이썬에서 행을 업데이트하십시오.

테이블에는 두 개의 열이 있습니다. 첫 번째는 변경되는 문자열이고 두 번째는 빈 문자열입니다.

모든 행과 각 행에 대해 살펴보고 첫 번째 열의 문자열을 읽고 파이썬에서 구현 한 함수를 계산 한 다음 그 결과로 두 번째 열을 업데이트하고 싶습니다.

가장 효율적인 (잘하면 관용적 인) 방법은 무엇일까요?

파이썬에서 db에 연결해야한다고 가정하십시오.

+0

은 무엇인가 등 만 행 당기에 당신의 선택 조정할 수 당신의 코드? –

+0

나는 디자인 단계에있다. 접근 방법에 대한 권장 사항을 원합니다. – eyaler

+2

디자인 제안 - 가능한 경우 계산이 무엇이든간에 Python이 아닌 SQL에서 수행하십시오. SQL에서 계산을 할 수 있다면, 하나의 UPDATE 문으로 모든 것을 할 수 있습니다. 파이썬에서해야한다면, 디자인은 모든 행을 쿼리하고, 당신이가는대로 업데이트를해야만합니다. – FrobberOfBits

답변

1

가장 효율적인 방법은 COPY를 사용하여 단일 열을 텍스트 파일로 덤프하고, 파이썬을 통해 공급하고, 테이블을 자르고, COPY로 결과 두 열을 다시로드하는 것입니다.

1

순수 SQL에서 업데이트를 수행 할 수없는 경우 이라는 이름의 psycopg 커서을 사용하는 것이 좋습니다. 그러면 커서가 선택 쿼리를 청크합니다. 그런 다음 표준 Python for row in cursor 루프를 사용하여 커서를 반복 할 수 있으며 필요에 따라 자동으로 새 행을 가져옵니다 (테이블이 꽤 큰 경우 메모리 문제를 방지합니다).

또한 각 업데이트가 가능한 빨리 수행되도록하는 것이 중요합니다 (더 작은 테이블의 경우에도 200ms 대 2ms가 소요되는 순차 스캔이 더 빠릅니다).

마지막으로 이름이 지정된 커서의 청크 크기 (기본값은 2000)와 함께 가능하면 커밋을 배치하는 것이 좋습니다. 커밋이 비싸고 각 행 반복 후에 커밋을하면 더 빨리 추가됩니다. 2 열은 빈 문자열입니다 당신이 그것을 오류로 인해 여러 번 새로운 데이터를 실행하려면 코드가 재시작되도록

당신은

관련 문제