如何将Django模型实例“pickle”到数据库中,以便生成可以加载示例数据的Python代码?

8 投票
2 回答
9357 浏览
提问于 2025-04-17 11:06

我想知道怎么把Django模型的实例保存到数据库里,然后转成可以用来加载示例数据的Python代码。

我的目标是:
1) 从我在MySQL数据库里存储的几百条记录中,做一个快照。
2) 对这个快照里的数据进行修改(比如把名字去掉)。
3) 把这些数据转成一个“序列化字符串”或者实际的Python代码,这样我就可以用它来加载数据到新用户的账户里。

我主要想实现的功能是,从我当前活跃的Django网站用户中选择一个,复制并匿名化他们的一些数据,然后把这些数据作为示例数据加载给所有新用户,这样他们就可以用这些数据来帮助学习系统。

2 个回答

3

在Django 1.8及以上版本中,如果你的模型里有外键,你可以使用:

my_dict = dict([(f.attname, getattr(instance, f.attname))
               for f in instance._meta.get_fields()
               if hasattr(f, 'attname')])
14

一个简单的方法是把模型转换成字典。这样,你就可以很方便地把它保存起来,然后再用它来创建新的模型实例。

要把模型存储为字典,你可以使用Django自带的一个函数:

from django.forms.models import model_to_dict
my_dict = model_to_dict(my_instance,fields=[],exclude=[])

一旦你把实例转换成字典,并且把需要的部分处理好,就可以使用普通的 pickle.dumpspickle.loads 方法来存储和取回数据。要用这个字典创建一个新的模型实例,你可以这样做:

my_instance = MyModel(**my_dict)
#add any customization for the new instance here
my_instance.save()

撰写回答