我正在尝试取消对MySQL数据库中存储为blob的对象的锁定。我已经手动生成了pickle对象并将其存储在数据库中,但是当我尝试取消对该对象的pickle时,会出现以下相当神秘的异常:
importorror:没有名为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)在linux上运行的MySQL数据库blob字段中手动插入text.txt的内容
3)在linux机器上运行的Python中,从MySQL中获取列的内容
4)假设将blob列的内容放入名为data的变量中,请尝试以下操作:
cPickle.loads(rawString)
只是一个交互式的python会话,以显示不需要任何特定的代码就可以出现此问题:
在windows机器上做这样的事情
然后试着从linux系统中检索数据
如果只是选取基类型,则错误消息可能会更加混乱。这就是我得到的列表
[12, 1.2, '']
:这似乎是由我导出pickled对象的方法引起的。
This bug report请参阅,建议通过导出到以二进制模式写入的文件来解决我的问题。我现在要试一试,看看这能不能解决我的问题。
更新:这有效。解决方案是确保将pickled对象导出到以二进制模式打开的文件中,即使使用默认协议0(通常称为“文本”)
基于所讨论的原始示例的正确代码:
另外,简单地在(windows创建的)pickle文件上运行dos2unix(在linux下)就解决了这个问题。(没有尝试过开放模式“wb”的东西。) 丹
相关问题 更多 >
编程相关推荐