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

0

显而易见,您不应该将原始查询发送到服务器。其次,使用unicode_literals u""字符串很奇怪。第三,使用 unicode 字符串然后转储出来 asutf-8也很奇怪。我建议 [阅读编码开始]( http://kunststube.net/encoding/

为了解决可能出现的实际问题,问题可能出在 pyodbc 库上。您连接到什么数据库,您是否考虑过使用不同的驱动程序?如果数据库支持您尝试执行的查询 ( select unicode from table where field = 'value'),那么很可能是驱动程序搞砸了它。

于 2014-11-12T18:37:29.007 回答