有解决这个问题的办法吗?
我有一个使用SQL_Latin1_General_CP1_CI_AS排序规则设置的MSSQL表。
engine = create_engine('mssql+pyodbc://'+ServerName+'/'+Database+'?driver='+ServerDriver+'?charset=cp2150')我可以把它加载到熊猫的DataFrame中
prov_chunk = pd.read_sql('select * from table_name,engine')但在我尝试使用Blaze时遇到错误
#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更多地用于我自己的数据分析。有什么想法吗?
发布于 2016-09-23 17:42:57
这是一个迟来的答案,但它可能对某些人仍然有用。
在检测和验证数据库排序规则时,Blaze依赖于包datashape。但是,datashape目前识别的编码集非常小。它们存储在受保护的模块变量_canonical_string_encodings中。在version 0.5.2中,只支持ascii、utf-8、utf-16和utf-32的几个别名,但不支持Latin-1等编码,也不支持MySQL使用的utf8mb4_unicode_ci。
要解决此问题,可以向_canonical_string_encodings添加新的编码。在第一次调用Blaze方法之前,使用SQL_Latin1_General_CP1_CI_AS排序规则尝试插入以下行:
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的未来版本可能会在没有通知的情况下更改此变量。
https://stackoverflow.com/questions/33644815
复制相似问题