【问题标题】:Unsupported string encoding using Blaze Data(engine)使用 Blaze Data(引擎)的不支持的字符串编码
【发布时间】:2015-11-11 05:34:08
【问题描述】:

有解决办法吗?

我有一个使用 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')

但是当我尝试使用 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 进行我自己的数据分析。有什么想法吗?

【问题讨论】:

  • ServerDriver的值是多少?

标签: python pandas blaze


【解决方案1】:

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

Blaze 在检测和验证数据库排序规则时依赖于包 datashape。但是,datashape 识别的编码集目前非常少。它们存储在受保护的模块变量_canonical_string_encodings 中。截至version 0.5.2,仅支持asciiutf-8utf-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 的未来版本可能会更改此变量,恕不另行通知。

【讨论】:

    猜你喜欢
    • 2018-02-18
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 2022-11-23
    • 2022-07-28
    相关资源
    最近更新 更多