2011-02-02 4 views
3

필자는 현장에서 데이터를 수집하려는 경우가 여러 번 있습니다. 이것은 내가 항상 내 postgres 데이터베이스에 액세스 할 수없는 상황에 있습니다.psycopg2를 사용하여 연결없이 쿼리 생성

psycopg2 기능을 오프라인으로 사용하여 보관할 수있는 쿼리를 생성하고 데이터베이스에 연결할 수 있으면 작업을 동기화 상태로 유지하는 것이 좋습니다. 되돌려 놓은 모든 것을 처리하십시오.

내가 현재 고민하고있는 한 가지는 psycopg2 커서가 연결을 구축해야한다는 것입니다.

내 질문은 : 활성 연결 개체없이 mogrify 같은 일을 할 수있는 커서를 사용하는 방법은

있습니까? 또는 데이터베이스에 연결되지 않은 연결 개체를 사용합니까? 나는 나중에 그들이 처리 될 수 있도록 일시적으로 파일에 모그 리치 결과를 쓰고 싶습니다.

답변

0

나중에 다른 구조에 삽입 할 데이터를 저장하는 것이 더 쉽고 융통성있는 것처럼 보입니다. 아마도 csv 파일 일 겁니다. 그런 다음 연결하면 해당 테이블을 실행할 수 있지만 필요한 경우 해당 CSV로 다른 작업을 쉽게 수행 할 수도 있습니다.

+0

나는이 aproach를 사용할 것이다. 온라인 (http://initd.org/psycopg/docs/cursor.html#cursor.copy_from)에서 postgresql로 복사 할 수있는 (또는 그 이상) csv 파일을 만듭니다. 감사합니다. – milovanderlinden

7

연결이 이스케이프 (인코딩, 표준 준수 문자열 등)에 사용되는 일부 매개 변수를 감지하는 데 사용되므로 취약한 접근 방법입니다.

매개 변수에 psycopg2.extensions.adapt(x).getquoted()을 "수동으로"호출 한 다음 일반 Python % 연산자를 사용하여 쿼리에 병합 할 수 있습니다.

현재 출시 된 psycopg 버전 (최대 2.3.2)은 None ->NULL 변환에 실패 할 수 있습니다. 이 값을 수동으로 변환하거나 없음에 대한 어댑터를 등록 할 수 있습니다. 자세한 내용은 this commit에서 확인할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 나는 그 취약성을 이해하고 실제로 다른 선택을 할 것이다. – milovanderlinden

+0

2011 년 현재, 2017 년에이 매개 변수 (인코딩, 표준 준수 문자열 등)를 보내거나 연결없이 mogrify를 호출 할 수있는 방법이 있습니다. github dvarrazzo에서 동일한 사진을보고 저는 같은 개발자라고 생각합니다. 너라면, 그걸 설명 할 수있어. 감사합니다 –

+0

@Sk. 아니요, 매개 변수를 위장 할 방법이 없습니다. 서버가 받아 들일 수있는 것을 중심으로하고 있다면,'adapt()'를 수동으로 사용할 수 있습니다. "일반"솔루션이 아닙니다. 한 번 작성하여 어디서나 실행할 수있는 문자열이지만 서버 구성 방법을 알고 있으면 솔루션으로 충분할 것입니다. SQL 문자열은 데이터를 저장하고 적절한 데이터 구조에 저장하고 서버로 보낼 때 SQL로 변환하는 것이 좋지 않은 선택입니다. – piro

관련 문제