过滤unicode列名称

时间:2014-07-26 13:14:12

标签: python sql-server unicode sqlalchemy

我想使用sqlalchemy查询一个名为u'F\u0151biztos\xedt\xf3'的mssql数据库(我使用pymssql驱动程序)。我已将此列名映射到ascii列键,名为'Fobiztosito'

现在我的表格列显示为

In [32]: Biztosito.__table__.c.Fobiztosito
Out[32]: Column('F\u0151biztos\xedt\xf3', VARCHAR(length=50, collation=u'Hungarian_Technical_CI_AS'), table=<BIZTOSIT>, key='Fobiztosito')

虽然此列上的过滤失败(此处为完整堆栈跟踪:http://pastebin.com/G20T6s92):

In [38]: session.query(Biztosito.pk).filter(Biztosito.Fobiztosito=='AHB').all()
<type 'str'>: (<type 'exceptions.UnicodeEncodeError'>, UnicodeEncodeError('ascii', u'params dictionary did not contain value for placeholder: F\u0151biztos\xedt\xf3_1', 58, 59, 'ordinal not in range(128)'))

这是查询语句

In [37]: print session.query(Biztosito.pk).filter(Biztosito.Fobiztosito=='AHB').statement
SELECT [BIZTOSIT].[BiztKod]
FROM [BIZTOSIT]
WHERE [BIZTOSIT].[F\u0151biztos\xedt\xf3] = %(F\u0151biztos\xedt\xf3_1)s

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

为什么不使用utf-8校对?我正在使用俄语,当我需要使用unicode文本或符号或查询表时,我只使用utf-8,Unicode或UnicodeText。

cat_name = self.category.query.with_entities(models.Category.category_name,models.Category.id).\
       filter_by(category_name=u'Категория 1').first()