我正在使用 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/