임의의 쿼리를 서버 측에 게시합니다. 그러면 쿼리가 실행되고 결과 집합이 클라이언트로 다시 전송됩니다. 일반적인 쿼리는 다음과 같습니다.쿼리를 실행하거나 jsonpickle에서 UnicodeDecodeError
select Наименование from sys_Атрибут where Наименование = 'Район'
여기서 알 수 있듯이 비 영어권 리터럴이 포함되어 있습니다. 이 쿼리는 실행되지 않습니다. 그러나, 이렇게 쓰면
select Наименование AS attr from sys_Атрибут where Наименование = 'Район'
그렇다면 괜찮습니다. 서버 측 코드는 다음과 같습니다.
#--coding: utf-8
from __future__ import unicode_literals
...
import pyodbc # tried both of them
import pypyodbC#
def resultset(request):
query = request.POST['query']
query = u'{}'.format(query)
cnx = pyodbc.connect("DRIVER=FreeTDS;SERVER=192.168.0.1;PORT=1433;
DATABASE = mydatabase;UID=sa;PWD=password;TDS_Version=7.0;ClientCharset=UTF8;")
cursor = cnx.cursor()
cursor.execute(query.encode('utf-8'))
columns = [desc[0] for desc in cursor.description] # sometimes error happens at this point
data = []
output = []
for row in cursor:
data.append(dict(zip(columns, row)))
output = '{items:'
output += jsonpickle.encode(data) # sometimes at that point
output += '}'
return HttpResponse(output)
전체 문제점은 테이블 필드의 이름에 있습니다. 나는이 문제를 해결하기 위해 다른 방식으로 data.append(dict(zip(columns, row)))
을 코딩해야한다고 생각한다.