“我该怎么做?”;泡菜“;将数据库中Django模型的实例转换为可用于加载示例数据的示例python代码?
如何将数据库中Django模型的实例“pickle”到可用于加载示例数据的示例python代码中 我想:“我该怎么做?”;泡菜“;将数据库中Django模型的实例转换为可用于加载示例数据的示例python代码?,python,django,pickle,sample-data,Python,Django,Pickle,Sample Data,如何将数据库中Django模型的实例“pickle”到可用于加载示例数据的示例python代码中 我想: 1) 为Django项目拍摄我存储在MySQL数据库中的数百条记录的快照 2) 拍摄此快照并修改其中的数据(删除名称) 3) 将此数据转换为“pickle string”或实际的python代码,我可以使用这些代码将数据加载到新的用户帐户中。 我正在尝试实现的主要功能是选择我当前活跃的Django网站用户之一,复制并匿名他们的一些数据,然后加载这些数据作为网站所有新用户的样本数据,以便他们可
1) 为Django项目拍摄我存储在MySQL数据库中的数百条记录的快照
2) 拍摄此快照并修改其中的数据(删除名称)
3) 将此数据转换为“pickle string”或实际的python代码,我可以使用这些代码将数据加载到新的用户帐户中。
我正在尝试实现的主要功能是选择我当前活跃的Django网站用户之一,复制并匿名他们的一些数据,然后加载这些数据作为网站所有新用户的样本数据,以便他们可以使用这些数据帮助学习系统。一个简单的方法是将模型转换为dict。然后,您可以简单地对其进行pickle,然后重新膨胀以创建新的模型实例 要将模型存储为dict,可以使用内置的Django函数:
from django.forms.models import model_to_dict
my_dict = model_to_dict(my_instance,fields=[],exclude=[])
将实例转换为dict并编辑必要的内容后,只需使用普通的pickle.dumps
和pickle.loads
方法来存储和检索数据。要使用该dict创建新的模型实例,可以执行以下操作:
my_instance = MyModel(**my_dict)
#add any customization for the new instance here
my_instance.save()
在Django 1.8及更高版本上,如果您的模型具有外键,则可以使用:
my_dict = dict([(f.attname, getattr(instance, f.attname))
for f in instance._meta.get_fields()
if hasattr(f, 'attname')])
这听起来很像。。。Django可以导出JSON格式的数据。使用Django自己的内部序列化要容易得多。为什么不简单地使用Python的
dumpdata
和loaddata
内置命令呢?请注意,如果dict包含外键,则无法从它创建新模型,因为它会引发值错误