サーバー側に任意のクエリを投稿すると、それが実行され、結果セットがクライアントに返されます。典型的なクエリは次のようになります。
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)))
ます。