python - 如何使用 Python 2.7 正确解开使用 2.5 pickle 的内容?

标签 python google-app-engine python-2.7 pickle python-2.5

我正在将 Web 应用程序从 Python 2.5 运行时迁移到 Python 2.7。 我的应用程序将 pickle 数据存储到数据库中,并且在取消 pickle 我存储的数据时,我遇到了一些长整数问题:

像 100003087328067 这样的 int,使用 Python 2.5 进行 pickle,在 Python 2.7 下被 unpickle 为 2147483647(即 2^31-1)。

如何取回正确的值?

会不会有其他问题?例如使用 str 编码? (我找到了这个,但它与 python 3 一起使用:Unpicking data pickled in Python 2.5, in Python 3.1 then uncompressing with zlib)

更多关于我的背景: 我正在迁移一个 Google App Engine 应用程序,我使用一个自定义的 db.Property 存储我的数据,它的行为有点像 NDB PickleProperty。

最佳答案

我建议采用两阶段设置:

编写一个 Python 2.5 脚本来 unpickle 当前值,使用 JSON 等通用格式存储它们,然后将其读回 Python 2.7 应用。

理想情况下,继续使用像 JSON 这样的格式而不是 pickling,这样它将来就不会依赖于平台。更好的是,将数据作为适当规范化的数据存储在数据库中,因此可以更轻松地使用它。

关于python - 如何使用 Python 2.7 正确解开使用 2.5 pickle 的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9313050/

相关文章:

python - Python 中的 float 概念

python - 谷歌应用程序引擎 SDK : System time different from the computer time

python - 断言一个元素不存在 python Selenium

python - 在 Python 3 中 pickle 关键字参数

python - 将元组分组到列表中

python - pandas GroupBy 中按列表列分组

java - 处理来自 superfeedr 的重复通知

python - 如何制作图像,以便 appengine 在调整大小时不会将透明变为黑色?

python-2.7 - 如何使用查询游标跳转到特定页面?

python - 确保 Celery 中不同来源的任务顺序