我正在尝试解开存储为 MySQL 数据库中 blob 的对象。我已经手动生成了 pickle 对象并将其存储在数据库中,但是当我尝试取消 pickle 对象时,我得到了以下相当神秘的异常:
ImportError: 没有名为 copy_reg 的模块
关于为什么会发生这种情况的任何想法?
繁殖方法
注意:必须在 Windows PC 上执行步骤 1,在 Linux PC 上执行步骤 3 和 4。
1) 在 Windows PC 上:
file = open("test.txt", "w")
thing = {'a': 1, 'b':2}
cPickle.dump(thing, file)
2) 手动将 text.txt 的内容插入到 Linux 上运行的 MySQL 数据库的 blob 字段中
3) 在 Linux 机器上运行的 Python 中,从 MySQL 获取列的内容
4) 假设您将 blob 列的内容放入一个名为 data 的变量中,试试这个:
cPickle.loads(rawString)
最佳答案
看来这可能是我导出 pickle 对象的方法造成的。
This bug report看来表明我的问题可以通过导出到以二进制模式写入的文件来解决。我现在就试一试,看看这是否能解决我的问题。
更新:这行得通。解决方案是确保将 pickle 对象导出到以二进制模式打开的文件中,即使您使用的是默认协议(protocol) 0(通常称为“文本”)
基于相关原始示例的正确代码:
file = open("test.txt", 'wb')
thing = {'a': 1, 'b':2}
cPickle.dump(thing, file)
关于python - 导入错误 : No module named copy_reg pickle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/556269/