2015-11-11 32 views
2

有没有解决方法?使用Blaze Data不支持的字符串编码(引擎)

我有一个使用SQL_Latin1_General_CP1_CI_AS排序规则设置的MSSQL表。

engine = create_engine('mssql+pyodbc://'+ServerName+'/'+Database+'?driver='+ServerDriver+'?charset=cp2150') 

我能够把它与

prov_chunk = pd.read_sql('select * from table_name,engine') 

加载到大熊猫数据帧,但打一个错误,当我尝试使用火焰

#Error 
C:\Anaconda\envs\care\lib\site-packages\datashape\coretypes.pyc in __init__(self, *args) 
    361   except KeyError: 
    362    raise ValueError('Unsupported string encoding %s' % 
--> 363        repr(encoding)) 
    364 
    365   self.encoding = encoding 

ValueError: Unsupported string encoding u'SQL_Latin1_General_CP1_CI_AS' 

我不能改变的整理和希望更多地使用Blaze进行我自己的数据分析。有任何想法吗?

+0

'ServerDriver'的值是什么? – pneumatics

回答

2

这是一个较迟的答案,但它可能对某人仍然有用。

Blaze在检测并验证数据库归类时依赖于包datashape。但是,datashape确认的一组编码目前非常小。它们存储在受保护的模块变量_canonical_string_encodings中。从version 0.5.2开始,仅支持ascii,utf-8,utf-16utf-32的几个别名,但没有编码,例如您的Latin-1,或者在我的情况下,utf8mb4_unicode_ci与MySQL所使用的不同。

要解决这个问题,可以在_canonical_string_encodings中添加新的编码。随着SQL_Latin1_General_CP1_CI_AS整理,请尝试将以下几行,你叫Blaze方法首次之前:

import datashape 
datashape.coretypes._canonical_string_encodings.update({"SQL_Latin1_General_CP1_CI_AS": "A"}) 

这些代码行添加为你的编码到字典中的关键,并假装这是一个ascii编码。如果这不起作用(因为数据中的字符不符合ascii编码),请尝试"U8"而不是"A""U8"为我的utf8mb4_unicode_ci排序规则做了工作。

猴子修补datashape然而,更像是一种真正的解决方案。字典_canonical_string_encodings被标记为受保护,但黑客忽略了这一点。请注意,这可能会导致代码不稳定,因为未来版本的datashape可能会在不通知的情况下更改此变量。

相关问题