我有一个奇怪的问题。我必须与第三方数据库进行交互,并使用一些天才用于列名称Português
,并使用特殊字符。
我使用pyodbc与数据库交互,通常在查询后我通过执行以下操作将每行作为字典获取:
columns = [desc[0] for desc in self._cursor.description]
for row in self._cursor:
yield dict(itertools.izip(columns, row))
但是当我在这张精彩的桌子上查询时,我得到了一个如下字典:
{'Portugu\xeas': 'ola'}
如果我打印密钥,我会PortuguÛs
。密钥本身是一个看起来像unicode文字(u'Portugu\xeas' == u'Português'
)的字符串,所以我在我的初始函数周围执行了这样做:
for row in self._cursor:
yield {key.decode('unicode-escape'): value for key, value in itertools.izip(columns, row)}
在我目前的情况下,这似乎工作得很好......但说实话,我真的不知道自己在做什么,而且我害怕把它投入生产。
注意:我正在针对MS SQL Server进行测试,但它也应该在Oracle中运行。
这是处理此问题的正确方法吗?