python - pickle/zodb : how to handle moving . 带有类定义的 py 文件?

标签 python refactoring pickle zodb

我正在使用 ZODB,据我所知,它使用 pickle 来存储类实例。我正在做一些重构,我想将我的 models.py 文件分成几个文件。但是,如果我这样做,我认为 pickle 将无法找到类定义,因此将无法加载我已经存储在数据库中的对象。处理此问题的最佳方法是什么?

最佳答案

您可以创建别名;因为一个 models.py 模块被拆分成多个新模块,您只能通过将您的类导入旧位置来执行此操作。

这两种方法都会导致实例 pickle 的新副本指向新位置;如果您可以强制写入已移动类的所有 实例,则无需保留别名。您可以通过在要再次写入的实例上将 _p_changed 设置为 True 来执行此操作。

因此,要创建别名,请在旧位置导入移动的类:

from newmodule1 import MyClass1, MyClass2
from newmodule2 import MyClass3

如果您只是重命名一个模块(这样所有相同的类都可以在一个新位置找到,它们本身可能是一组导入),您还可以创建一个sys.modules 旧名称条目:

import sys
import newmodule

sys.modules['full.path.to.old.module] = newmodule

关于python - pickle/zodb : how to handle moving . 带有类定义的 py 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12163918/

相关文章:

python - Python中时间序列的时滞嵌入

python - 以范围为键的字典

c# - 重构别人源码的礼仪?

javascript - 改进js代码去掉全局变量和函数

python-3.x - 使用 Selenium 收集的 cookie 的到期日期格式

python - 在 Python 2.7 上安装 Pillow

Python self[name] = value 是什么意思?

javascript - 使用箭头函数重构嵌套函数

python - 加载 pickle 的 python 对象使用大量内存

python - 如何读写pickle信息