2016-12-30 1 views
0

웹 크롤러로 스칸디나비아 언어 웹 사이트를 읽고 있는데이를 PostgreSQL 데이터베이스에 삽입하려고합니다.Python을 사용하여 PostgreSQL에 utf8 데이터를 삽입 할 때 문제가 발생했습니다.

Insert into name (surname) VALUES ('Børre');

이것은 윈도우 PSQL 쉘에서 수행되었다

원래 나는 수동으로이 같은 문제가 될 것이다 문자를 삽입하려고 UTF-8로 내 PSQL DB를 인코딩하는 시도 .

이렇게하면 다음과 같은 오류가 발생합니다. 오류 : "UTF8"인코딩에 대한 바이트 시퀀스가 ​​잘못되었습니다 : 0x9b. 그래서 몇 가지 인터넷 검색을 수행 한 후 클라이언트 인코딩을 latin1로 변경했습니다. 이제 그 성명서는 성공적이었습니다. 서버 인코딩은 여전히 ​​utf8입니다.

내 파이썬 스크립트를 통해 동일한 삽입 작업을 수행 할 때 데이터베이스 이름에 이름이 표시됩니다. 클라이언트의 인코딩을 utf8로 다시 변경하면 틀린 특수 문자가있는 항목도 얻게됩니다.

파이썬 스크립트는 utf8로 인코딩되어 있지만 정확한 이름을 인쇄합니다.

삽입 문 :

이전에 언급 한 바와 같이
con = psycopg2.connect(*database details*) 

print("Opened database successfully") 

cur = con.cursor() 

#INSERT NAME 

query = "INSERT INTO name (surname) VALUES (%s) RETURNING id" 

data = ('børre') 

cur.execute(query,data) 

, 인쇄 (personObject.surname가) 제공 '보레'

나는 다음 시도 할 경우 : 난에서 다음을 얻을

query = "INSERT INTO name (surname) VALUES (%s) RETURNING id" 

data = ('børre'.encode('utf-8')) 

cur.execute(query,data) 

내 데이터베이스 :

\ x62c383c2b8727265

,
+1

어떤 버전의 파이썬입니까? –

+1

스택 추적을 게시 할 수 있습니까? –

+1

UTF-8 인코딩을 사용하지 않는 이유는 무엇입니까? 오늘날, 그것을 사용하지 않을 이유가 없습니다. – Daniel

답변

1

psycopg2는

data = ('børre'.encode('utf-8'))

가 당신을 얻을, 당신은 그것을 리터럴 PostgreSQL의 BYTEA로 변환 할 바이트의 배열을 주면 그냥 자신의 PostgreSQL의 표현

에 주어진 인수를 변환 PostgreSQL의 쿼리를 이해하지 않습니다 bytes.

이렇게하지 마십시오. string을 사용하십시오.

상단에있는 코드 조각이 효과적입니다. I c383c2b8 16 진수로 인코딩 ø 참조 에러

, 즉 헥스 두 문자 ø으로 UTF8로 변환한다. Python이 스크립트가 UTF8이 아니라 다른 코드 페이지라고 생각한다고 생각합니다.

+0

답변 해 주셔서 감사합니다.PSQL 데이터베이스에서 'børre'가 될 방법에 대한 제안은 무엇입니까? – bjornasm

+0

그냥 작동해야합니다 .. – Jasen

관련 문제