首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不支持使用Blaze数据的字符串编码(引擎)

不支持使用Blaze数据的字符串编码(引擎)
EN

Stack Overflow用户
提问于 2015-11-11 13:34:09
回答 1查看 526关注 0票数 2

有解决这个问题的办法吗?

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

代码语言:javascript
复制
engine = create_engine('mssql+pyodbc://'+ServerName+'/'+Database+'?driver='+ServerDriver+'?charset=cp2150')

我可以把它加载到熊猫的DataFrame中

代码语言:javascript
复制
prov_chunk = pd.read_sql('select * from table_name,engine')

但在我尝试使用Blaze时遇到错误

代码语言:javascript
复制
    #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更多地用于我自己的数据分析。有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2016-09-23 17:42:57

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

在检测和验证数据库排序规则时,Blaze依赖于包datashape。但是,datashape目前识别的编码集非常小。它们存储在受保护的模块变量_canonical_string_encodings中。在version 0.5.2中,只支持asciiutf-8utf-16utf-32的几个别名,但不支持Latin-1等编码,也不支持MySQL使用的utf8mb4_unicode_ci

要解决此问题,可以向_canonical_string_encodings添加新的编码。在第一次调用Blaze方法之前,使用SQL_Latin1_General_CP1_CI_AS排序规则尝试插入以下行:

代码语言:javascript
复制
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的未来版本可能会在没有通知的情况下更改此变量。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33644815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档