우분투에서 postgres를 사용하고 unixodbc 및 pyodbc 4.0.16을 사용하여 데이터에 액세스합니다. 유니 코드와 관련된 문제가있는 것 같습니다. DB를 쿼리 할 때 열 머리글이 손상된 것으로 보입니다.우분투에서 pyodbc로 질의 할 때 열 머리글이 손상됩니다.
import pyodbc
conn = pyodbc.connect("DSN=local_postgres")
conn.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8')
conn.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
#conn.execute('create schema test')
conn.execute('create table test.uni_test(column1 varchar)')
conn.execute("insert into test.uni_test(column1) values ('My value')")
results = conn.execute('select * from test.uni_test')
print results.description
columns = [column[0].decode('latin1') for column in results.description]
print "columns: " + str(columns)
print list(results)
Result:
((u'c\x00\x00\x00o\x00\x00', <type 'str'>, None, 255, 255, 0, True),)
columns: [u'c\x00\x00\x00o\x00\x00']
[(u'My value',)]
나는 문제가 무엇인지 확실하지 않다 :
다음은 예입니다. BTW - 정확히 동일한 동작이 내 Mac (el capitan)에서 관찰됩니다. 미리
감사 알렉스
은 아마도'(pyodbc.SQL_WMETADATA, 인코딩 = 'UTF-32le을'conn.setdecoding을 시도 할 필요했다)''setdecoding' 호출에 추가로 사용됩니다. –
또한'print (conn.getinfo (pyodbc.SQL_DRIVER_NAME) + ''+ conn.getinfo (pyodbc.SQL_DRIVER_VER))'라고 말하고 그 내용을 알려주십시오. –
conn.setdecoding (pyodbc.SQL_WMETADATA, encoding = 'utf-32le')을 추가하면 실제로 문제가 해결되었습니다! – user975383