0

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

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)))ます。

4

1 に答える 1